从python子进程打印shell命令的输出



我正在运行一个shell脚本,它在执行…它们只是状态输出而不是实际输出....

我希望它们显示在JTextArea上。我正在开发jython。我的这段代码看起来像:

self.console=JTextArea(20,80)
cmd = "/Users/name/galaxy-dist/run.sh"
p = subprocess.Popen(cmd, stdout=subprocess.PIPE,stderr=subprocess.PIPE, shell=True)
self.console.append(p.stdout.read())

这将等待命令完成并打印输出。但我想展示实时输出来模拟控制台。有人知道吗?

你把事情弄得太复杂了。Popen文档对流参数做了如下说明:

如果默认设置为None,则不会发生重定向;子进程的文件句柄将从父进程继承。[我的重点]

因此,如果您希望子进程的输出输出到标准输出,只需将这些参数留空:

subprocess.Popen(cmd, shell=True)

实际上,您没有使用Popen构造函数的任何高级特性,并且这个特定的示例不需要shell的任何解析,因此您可以使用subprocess.call()函数进一步简化它:

subprocess.call(cmd)

如果仍然需要返回代码,只需设置一个变量等于这个调用:

return_code = subprocess.call(cmd)

最新更新