【问题标题】:Return output of Java Exec when providing array提供数组时返回 Java Exec 的输出
【发布时间】:2019-01-25 15:55:01
【问题描述】:

我正在使用 java 的exec() 运行一些 *nix 系统命令,特别是 python 脚本,但问题更普遍。

import java.io.*;

public class JRC {

    public static void main(String args[]) {
        String s[] = {"/bin/bash", "-c",
                 "source venv/bin/activate;python mergeExcel.py '/home/201811/'"};
        try{
            Process p = Runtime.getRuntime().exec(s);
        }
        catch (IOException e) {
                    System.out.println("exception: ");
                    e.printStackTrace();
        }
    }
}

上面的代码工作,根据mergeExcel.py工作的程度。 但是,我不知道如何从 python 打印到标准输出。

这是我的尝试,仅当我们 exec() 一个简单的字符串(例如 "ps -ef")而不是我正在使用的字符串数组时才有效。

try {
    Process p = Runtime.getRuntime().exec(s);

    BufferedReader stdInput = new BufferedReader(new
   InputStreamReader(p.getInputStream()));

    BufferedReader stdError = new BufferedReader(new
         InputStreamReader(p.getErrorStream()));

    while ((s = stdInput.readLine()) != null) {
        System.out.println(s);
    }
    while ((s = stdError.readLine()) != null) {
        System.out.println(s);
    }

    System.exit(0);
}

这实际上导致了不兼容类型的编译错误,java.lang.String 而不是必需的 java.lang.String[]。

如何打印source venv/.. 命令和python 命令的输出?

【问题讨论】:

  • 这似乎与Runtime.exec() 关系不大。当然,如果sString[],那么你不能在需要String 的地方使用它,因为它们是不同的类型。为什么不简单地声明一个正确类型的新变量来接收readLine()s 的结果?

标签: java exec


【解决方案1】:

感谢评论者,声明一些临时字符串以从 stdout 和 stderr 打印很简单,尽管也许其他用户有更优雅的解决方案

    try {
        Process p = Runtime.getRuntime().exec(s);

        BufferedReader stdInput = new BufferedReader(new
             InputStreamReader(p.getInputStream()));

        BufferedReader stdError = new BufferedReader(new
             InputStreamReader(p.getErrorStream()));

        String stdi;
        while ((stdi = stdInput.readLine()) != null) {
            System.out.println(stdi);
        }

        String stderr;
        while ((stderr = stdError.readLine()) != null) {
            System.out.println(stderr);
        }
        System.exit(0);
    }

【讨论】:

    猜你喜欢
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    相关资源
    最近更新 更多