我正在使用Java进程打开cmd来运行命令,然后将输出保存到文本文件。
ArrayList<String> commands = new ArrayList<>();
commands.add("cmd.exe");
commands.add("/c");
commands.add("cd "+System.getenv("LOGSTASH_PATH")+" && start /B cmd.exe /c \"logstash --config.test_and_exit -f "+configFileName+"\""+" > testing.txt");
ProcessBuilder builder = new ProcessBuilder(commands);
Process subProcess = builder.start();
Thread.sleep(50000);
subProcess.destroy();
这段代码在我用eclipse尝试时有效,但是当我从中产生战争并部署在tomcat中时,它不起作用。可能是什么问题?
如何解决?
我怀疑问题可能出在CD
指令上:
LOGSTASH_PATH
环境变量在Tomcat进程中是否可用。如果当前的Tomcat目录和LOGSTASH_PATH
属于不同的驱动器,请添加/d
限定符:
“ cd / d” + System.getenv(“ LOGSTASH_PATH”)+ ...
(如通过@nitind指出的那样,用Java调用cd
代替directory(File)
更好,这要好得多。