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

时间:2014-08-13 12:15:41

标签: swing subprocess jython

我正在运行一个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())

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

1 个答案:

答案 0 :(得分:1)

你让事情变得比他们需要的更复杂。 Popen docs说明了关于流参数的以下内容:

  

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

因此,如果你想要子进程'输出转到你的标准输出,只需将这些参数留空:

subprocess.Popen(cmd, shell=True)

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

subprocess.call(cmd)

如果您仍想要返回代码,只需设置一个等于此调用的变量:

return_code = subprocess.call(cmd)