gpt4 book ai didi

java - 捕获 python 命令的输出

转载 作者:行者123 更新时间:2023-12-02 06:06:41 24 4
gpt4 key购买 nike

我有以下 python 脚本

#!/usr/bin/env python
import subprocess
import sys
from time import sleep
p = subprocess.Popen(["ls", "-l", "."], stdout=subprocess.PIPE)
output, err = p.communicate()
print "*** Running ls -l command ***\n", output

print "I'm gonna wait 1 second"
sleep(1)

print "Waited..."

sleep(5)

print "Finished"

以及执行该脚本的以下 Java 程序:

protected List<String> runOutputLinesCommand(String scriptsPath) {
List<String> ret = new ArrayList<String>();

// constructs the python command to be executed
String cmd = scriptsPath
+ COMMAND;
ProcessBuilder pb = new ProcessBuilder(cmd);

pb.redirectErrorStream(true);
try {
// executes the command and waits for its interruption
Process p = pb.start();
String s;
// read from the process's combined stdout & stderr
BufferedReader stdout = new BufferedReader(new InputStreamReader(
p.getInputStream()));
while ((s = stdout.readLine()) != null) {
// appends the output of the command to the ret variable
ret.add(s.trim());
}
p.waitFor();
p.getInputStream().close();
p.getOutputStream().close();
p.getErrorStream().close();
} catch (InterruptedException ex) {
ret.add("script interrupted: " + ex);
} catch (IOException ex) {
ret.add("IOException: " + ex);
ex.printStackTrace(System.out);
} catch (Exception ex) {
ret.add("Exception: " + ex);
ex.printStackTrace(System.out);
}

return ret;
}

我想要的是java程序打印正在实时执行的python行,而不是在所有脚本执行之前。我希望 Java 程序在 python 脚本发生时打印它的输出。我怎样才能在java中实现这一点?

最佳答案

根据我的经验,为了确保 Python 脚本的输出不被缓冲,除了 DNA 建议之外,您还需要禁用输出缓冲。因此,请确保使用 -u 标志调用解释器的脚本;另外,sys.stdout.flush()可能是必要的。

有关更多信息,请参阅Disable output buffering或者只是谷歌“python 输出缓冲”或“python 禁用输出缓冲”。

关于java - 捕获 python 命令的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22230958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com