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