我正在使用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
命令的输出?
答案 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);
}