[英]How can I execute a Perl script from my Java program?
我正在編寫一個需要調用 Perl 腳本來執行某些操作的小工具。
我已經知道並編寫了有關如何調用它的代碼,但我必須為exec()
提供 Perl 腳本的完全限定路徑。
是否有可能將該腳本作為一種可以直接調用的 package 提供?
我想稍后生成一個可執行文件 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?
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();
如果您在字符串中讀取/存儲 perl 腳本,則可以像這樣執行它:
perlScript = "print \"HELLO\\n\"; print \"CIAOOOO\\n\";";
String perl_cmd = "echo \"" + perlScript + "\" |perl";
Runtime.getRuntime().exec(perl_cmd);
希望能幫助到你...
您可以將腳本寫到一個文件中,比如說一個臨時文件,然后從那里執行它,然后在完成后將其刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.