提供数组时返回Java Exec的输出

时间:2019-01-25 15:55:01

标签: java exec

我正在使用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打印到stdout。

这是我的尝试,只有在我们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命令的输出?

1 个答案:

答案 0 :(得分:0)

感谢评论者,声明一些临时字符串从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);
    }