【问题标题】:how to run basic command in linux using java?如何使用java在linux中运行基本命令?
【发布时间】:2014-07-02 09:05:40
【问题描述】:

我有一个类文件 abc.class,它是从 abc.java 编译而来的 在尝试执行此 java 程序时,我没有在控制台中获得输出。 我已经在 linux 环境中执行了这个文件。 该文件包含重要的行之一:

Runtime rt = Runtime.getRuntime();
String a = "ls";

Process proc = null;
try {
    proc = rt.exec(a);
}

注意:在执行程序时,提示不存在,我认为这可能是“ls”没有通过我的程序执行的原因。我没有收到任何错误。 我担心一旦文件执行,我将在提示中获得文件列表。 希望我能向大家澄清我的问题。 请我对我的这个问题有任何意见。你宝贵的

【问题讨论】:

  • 我认为 stackoverflow.com/questions/597927/…> 会有所帮助
  • Here 你有一个例子。
  • 你怎么知道它没有被执行?您是否以某种方式处理输出?
  • 您必须区分某些 shell 提供的命令和其他命令提供的命令。如果要执行 shell 命令,则必须先执行 shell。对于 Windows 也是如此,因此在几个示例中,您可以看到 windows 案例的 runtime.exec("cmd.exe ")

标签: java linux


【解决方案1】:

您的命令应该被执行,但是您的输出不会被打印,因为默认情况下输出不会被定向到您的控制台,为了在您的控制台上获取输出,您只需要从您的进程中获取输入流并需要读取它。

Runtime rt = Runtime.getRuntime();
String a = "ls";

  Process proc = null;
  try
  {
    proc = rt.exec(a);
    proc.waitFor();
    BufferedReader reader =  new BufferedReader(new InputStreamReader(proc.getInputStream())); 

    String line=" ";
    while((line=reader.readLine())!=null)
    {
       output.append(line+"\n");
    }
  }

【讨论】:

    【解决方案2】:

    这行得通:

    Runtime rt = Runtime.getRuntime();
    String a = "/bin/ls";
    
        Process proc = rt.exec(a);
        proc.waitFor();
        InputStream is = proc.getInputStream();
        InputStreamReader isr = new InputStreamReader( is );
        BufferedReader br = new BufferedReader( isr );
        String line;
        while( (line = br.readLine() ) != null ){
        System.out.println( line );
        }
        br.close();
        // to see errors:
        System.out.println( "*** error output ***" );
        InputStream isErr = proc.getErrorStream();
        InputStreamReader isrErr = new InputStreamReader( isErr );
        BufferedReader brErr = new BufferedReader( isrErr );
        String line;
        while( (line = brErr.readLine() ) != null ){
        System.out.println( line );
        }
        brErr.close();
    

    【讨论】:

    • 抱歉劳恩,昨天没查。
    • 但是你给出的字符串没有被执行,因为我在不同的路径中。我不明白为什么会这样。如果我仅将刺痛传递为“ls”,它可以工作,但“/bin/ls”不起作用。仅供参考,我在 ZSH.... 你能建议我在哪里出错
    • 检查你的shell中which ls的返回值。此命令返回的绝对路径是存储二进制文件的位置。但是,如果您对String a = "ls"; 感到满意,请离开。 (不过,它可能无法在其他人的系统上运行。)
    • 这是一个调查.. ls 工作正常,但如果我需要列出来自不同路径的所有文件和目录,比如 bin,使用“/bin/ls”根本不起作用.请建议/帮助
    • 添加错误流的读取 - 请参阅我编辑的答案。你必须准确地回答我的问题。 1) 如果你使用String a = "/bin/ls"; 会发生什么? 2)如果你使用String a = "ls /bin";会发生什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多