gpt4 book ai didi

java - 从 OS X 上的 Java 应用程序运行外部脚本

转载 作者:行者123 更新时间:2023-12-01 15:02:47 26 4
gpt4 key购买 nike

我在 OS X 10.8 上从 Java 应用程序获取外部脚本运行时遇到了实际问题。它可以在 Windows 上运行,所以不确定我在 OS X 上做错了什么。

什么有效(Windows):

String[] commands = {
"\"" + _appDataDir + "\\Temp\\Workers\\" + _batchName + "\"",
"\"" + _appDataDir + "\\Temp\\frame%d.jpg\"",
"\"" + _fileName + "\""};
proc = rt.exec(commands);

所以我有以下适用于 OS X 的内容:

String[] commands = {
_appDataDir + "/Temp/Workers/" + _batchName,
_appDataDir + "/Temp/Workers/mac-ffmpeg",
_appDataDir + "/Temp/frame%d.jpg",
"\"" + _fileName + "\""};
proc = rt.exec(commands);

当文件名中没有空格时,此方法有效,但当文件名中有空格时,此方法会失败并出现“java.io.IOException:错误的文件描述符”错误。

目前,我已将所有路径更改为没有空格,作为一个简单的修复,但我无法控制文件名字符串,因为这是用户从保存对话框中选择的。我尝试过在文件名周围使用或不使用双引号,但两者都没有任何区别。

我还尝试了 ProcessBuilder,如下所示(带或不带“/bin/bash/, -c”位):

ProcessBuilder proc2 = new ProcessBuilder(
"/bin/bash",
"-c",
_appDataDir + "/Temp/Workers/" + _batchName,
_appDataDir + "/Temp/Workers/mac-ffmpeg",
_appDataDir + "/Temp/frame%d.jpg",
"\"" + _fileName + "\""
);
proc = proc2.start();

但这给出了同样的错误。据我所知,我正在做其他类似问题中建议的所有事情,但没有任何效果。任何想法将不胜感激!

最佳答案

您不需要将 "\""+ _fileName + "\"" 括起来,只需简单的 _fileName 即可。当您向 Runtime.exec (或 ProcessBuilder)提供数组时,您已经将命令拆分为“单词” - 如果您添加要告诉的引号它查找名称实际上是双引号 + _fileName + 双引号而不仅仅是 _fileName 的文件。

真正的问题可能出在 _batchName 程序中,它可能是一个通过调用其他程序来完成实际工作的 shell 脚本。在该脚本中,您将收到 mac-ffmpegframe%d.jpg_fileName 参数,作为 $1$2$3,并且您需要确保它们在脚本中被正确引用,例如如果脚本当前显示类似

processFile $3

那么你需要将其更改为

processFile "$3"

如果是为了处理包含空格的文件名。或者,如果将其设置为一次处理多个文件:

processFiles $*

那么你需要将其替换为

processFiles "$@"

关于java - 从 OS X 上的 Java 应用程序运行外部脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13401908/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com