我正在通过Java运行perl脚本。代码如下所示。
try {
Process p = Runtime.getRuntime().exec("perl 2.pl");
BufferedReader br = new BufferedReader(
new InputStreamReader(p.getInputStream()));
System.out.println(br.readLine());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我的perl脚本是这样的,当我直接通过命令行运行它时,它要求我提供输入文件。我的问题是如何通过Java为perl脚本提供文件名?
答案 0 :(得分:0)
如果您不想为脚本添加另一个命令行参数(更干净,更健壮),则需要写入脚本的stdin。
此代码段应该有效(Test.java):
import java.io.*;
public class Test
{
public static void main(String[] args)
{
ProcessBuilder pb = new ProcessBuilder("perl", "test.pl");
try {
Process p=pb.start();
BufferedReader stdout = new BufferedReader(
new InputStreamReader(p.getInputStream())
);
BufferedWriter stdin = new BufferedWriter(
new OutputStreamWriter(p.getOutputStream())
);
//write to perl script's stdin
stdin.write("testdata");
//assure that that the data is written and does not remain in the buffer
stdin.flush();
//send eof by closing the scripts stdin
stdin.close();
//read the first output line from the perl script's stdout
System.out.println(stdout.readLine());
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
要测试它,您可以使用这个简短的perl脚本(test.pl):
$first_input_line=<>;
print "$first_input_line"
我希望这有帮助。另请查看以下Stackoverflow article。
*斯特