簡體   English   中英

如何從我的 Java 程序執行 Perl 腳本?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM