我正在运行一个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())
这将等到命令完成并打印输出。但我想展示模拟控制台的实时输出。有人有想法吗?
答案 0 :(得分:1)
你让事情变得比他们需要的更复杂。 Popen docs说明了关于流参数的以下内容:
默认设置为None,不会发生重定向; 孩子的文件句柄将从父母继承。 [我的重点]
因此,如果你想要子进程'输出转到你的标准输出,只需将这些参数留空:
subprocess.Popen(cmd, shell=True)
实际上,您没有使用Popen
构造函数的任何更高级的功能,而且这个特定的示例不需要shell进行任何解析,因此您可以进一步简化它使用subprocess.call()
函数:
subprocess.call(cmd)
如果您仍想要返回代码,只需设置一个等于此调用的变量:
return_code = subprocess.call(cmd)