Я использую 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
?