我试图使用以下java代码运行perl脚本:
ProcessBuilder ps = new ProcessBuilder("perl","test.pl","test.txt","|", "test1.pl",">","result.txt");
因此,第一个脚本读取一个txt
文件,然后打印一些结果。
然后,第二个脚本获得这个输出,执行其他一些修改,然后在一个新的txt文件result.txt
中打印它们。
这个命令行在windows上使用cmd
可以很好地工作,但是当使用java时,|
和>
会出现问题。
有办法使用java运行这样的命令吗?
发布于 2017-03-20 13:49:33
问题是使用">“的管道根本无法工作(当您进行那些java "process”调用时)。
您必须做的是:当创建这样的流程时,您可以(编程地)获取它的输入和输出流。
所以,与其执行管道命令,不如
perl test.pl
然后,您的java代码必须从该进程的标准输出中读取,并将该内容写入文件;或者,在您的示例中,将其写入运行第二个脚本的另一个进程调用的stdin中。
关于如何做到这一点,请参见here。
或者,您可以增强您的perl脚本以接受文件名参数,以便您可以将它称为
perl test.pl --write-to tmp.txt
perl test1.pl --read-from tmp.txt --write-to test.txt
例如。然后,您的java端可以一次性进行这两个调用。
https://stackoverflow.com/questions/42905270
复制相似问题