【问题标题】:How to supply command line argument to perl script through Java如何通过 Java 向 perl 脚本提供命令行参数
【发布时间】:2013-07-15 23:47:16
【问题描述】:

我正在通过 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 脚本提供文件名?

【问题讨论】:

  • "perl 2.pl" 之后添加你的论点?
  • 重写你的 perl 脚本,将输入文件名作为命令行参数,而不是只从标准输入询问名称?
  • 我还在“perl 2.pl”之后添加了我的论点,但它不起作用。实际上我正在向脚本提供输入文件名。
  • 我在 Linux 上运行它

标签: java perl command-line-arguments


【解决方案1】:

如果您不想在脚本中添加另一个命令行参数(这样更简洁、更健壮),则需要写入脚本的标准输入。

这个 sn-p 应该可以工作(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

*约斯特

【讨论】:

  • 您可以通过将字符串参数添加到ProcessBuilder 构造函数(例如new ProcessBuilder("myCommand", "myArg1", "myArg2", "myArg3"))向脚本传递额外的命令行参数。
猜你喜欢
  • 1970-01-01
  • 2014-04-03
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
相关资源
最近更新 更多