【发布时间】: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()关系不大。当然,如果s是String[],那么你不能在需要String的地方使用它,因为它们是不同的类型。为什么不简单地声明一个正确类型的新变量来接收readLine()s 的结果?