我有这个代码:
def method_a(self):
command_line = 'somtoolbox GrowingSOM ' + som_prop_path
subprocess.Popen(shlex.split(command_line))
......
def method_b(self): .....
....
正如大家所看到的,method_a 有一个调用 somtoolbox 程序的子进程。但是这个程序有一个很长的标准输出,我想隐藏它。我试过:
subprocess.Popen(shlex.split(command_line), stdout=subprocess.PIPE)
但它返回了这句话:
cat: record error: Broked Pipe
(这是葡萄牙语句子的翻译:“cat: erro de gravação: Pipe quebrado”)
(我来自巴西)
另外,我还有其他方法(例如那里的 method_b ),它们在 method_a 之后调用,并且这些方法在子进程完成该过程之前运行。
我如何才能完全隐藏标准输出(并且不希望它在任何地方),并让其他代码等待子进程完成执行?
Obs:somtoolbox 是一个 java 程序,它向终端提供长输出。
尝试过:
outputTuple = subprocess.Popen(shlex.split(command_line), stdout = subprocess.PIPE).communicate()
但连续将输出返回到外壳。
帮助!
最好的方法是将输出重定向到 /dev/null。你可以这样做:
devnull = open('/dev/null', 'w')
subprocess.Popen(shlex.split(command_line), stdout=devnull)
然后,要等到它完成,您可以在 Popen 对象上使用 .wait() ,得到这样的结果:
devnull = open('/dev/null', 'w')
process = subprocess.Popen(shlex.split(command_line), stdout=devnull)
retcode = process.wait()
retcode 将包含进程的返回代码。
附加:正如评论中提到的,这不会隐藏 stderr。要隐藏 stderr 也可以这样做:
devnull = open('/dev/null', 'w')
process = subprocess.Popen(shlex.split(command_line), stdout=devnull, stderr=devnull)
retcode = process.wait()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)