我正在编写一个需要调用Perl脚本来执行某些操作的小工具。
我已经知道并编写了如何调用它的代码,但我必须提供exec()
的Perl脚本的完全限定路径。
是否有可能将该脚本作为一种可以直接调用的包提供?
我想稍后生成一个可执行的JAR,并希望还有整个工具来提供Perl脚本,而不是知道它的位置。
目前就像:
private void extractAudioStream() {
inputFile = "C:\\Users\\Stefan\\Documents\\temp_tshark\\forward_stream.pcap";
outputFile_audiostream = "C:\\Users\\Stefan\\Documents\\temp_tshark\\forward_stream.pcm";
String perl_cmd = "perl C:\\Users\\Stefan\\Documents\\tshark_bin\\rtp_dump.pl " + inputFile + " " + outputFile_audiostream;
try {
p = Runtime.getRuntime().exec(perl_cmd);
希望问题很清楚。
我认为这可能不那么简单,因为系统perl
命令等待着
完全合格的路径?那么有没有可能发现我的
当前位置并将其传递给我的cmd-String?
答案 0 :(得分:2)
String perl_cmd = "perl -e \"print \\\"bla\\n\\\";\";"
Runtime.getRuntime().exec(perl_cmd);
修改:我忘了在-e
和脚本之间留一个空格;你还必须在脚本中转义反斜杠和双引号(如果你是Java中的内联脚本,而不是从jar文件中读取它,则两次),这使得多行内容有点尴尬。
因此,使用Process.getOutputStream
将脚本编写到Perl解释器的标准输入可能会更好:
String perlScript = "print \"hello\";"; // get from a jar with Class.getResourceAsStream()
Process p = new ProcessBuilder("perl").redirectErrorStream(true).redirectOutput(ProcessBuilder.Redirect.INHERIT).start();
BufferedWriter w = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
w.write(perlScript);
w.close();
p.waitFor();
答案 1 :(得分:1)
如果您在字符串中读取/存储perl脚本,则可以像这样执行:
perlScript = "print \"HELLO\\n\"; print \"CIAOOOO\\n\";";
String perl_cmd = "echo \"" + perlScript + "\" |perl";
Runtime.getRuntime().exec(perl_cmd);
希望它有所帮助...
答案 2 :(得分:0)
您可以将脚本写入文件,例如临时文件,然后从那里执行,然后在完成后将其删除。