将重定向运算符与 Java Runtime Exec 一起使用

2024-04-23

我有这个字符串,在 Windows XP 的 JVM 中与 Runtime.exec() 一起使用。

String cmd = encoderFull + " " + "-i " + originalFull + " "+ "-bitrate" + " " + bitrateVBR[i] + " " + "-bvhq"+ " " + "-avi " + outputFull + " " + "2>&1" + " " + "1>"+ outputFile + ".txt";

不幸的是“2>&1 1>output.txt”不起作用。其余的都可以。有没有办法使用命令来创建该文件?

再见, 大卫


基本上,不 - Runtime.exec() 不支持您尝试执行的操作。

请注意,Runtime.exec 是notshell - 在 exec(String) 的情况下,您显然正在使用它,它标记字符串(以空格作为分隔符),并尝试将第一个标记作为程序执行,其余标记作为参数那个程序。

因此,在您的情况下,重定向运算符将作为参数发送到由“encoderFull”变量命名的应用程序 - 它们不会像您期望的那样被 shell 解释,因为没有 shell。

据我所知,你有两种选择:

  1. 编写一个批处理文件(对于 Windows)或 shell 脚本(对于 *nix),来执行您的应用程序并进行重定向。然后使用 Runtime.exec() 以批处理文件/shell 脚本作为参数调用 shell(cmd 或 sh,或其他)

  2. 从 Runtime.exec 创建的进程中读取输出流,并使用 java io 将内容写入相应的文件

我强烈推荐#1,而不是#2

您可能还应该阅读这篇文章“当 Runtime.exec() 不会时 - 绕过与 Runtime.exec() 方法相关的陷阱” http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html在继续之前。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将重定向运算符与 Java Runtime Exec 一起使用 的相关文章

随机推荐