Python:使用subprocess.call而不是Popen获取输出
我有一个Python脚本的系统调用。我想有一个计时器,以及利用调用的输出。我可以一次执行一个:使用Python:使用subprocess.call而不是Popen获取输出,python,subprocess,Python,Subprocess,我有一个Python脚本的系统调用。我想有一个计时器,以及利用调用的输出。我可以一次执行一个:使用subprocess.call()实现一个计时器,并使用subprocess.Popen()检索输出。但是,我需要定时器和输出结果 有没有办法做到这一点 下面的代码给了我一个属性错误:“int”对象没有属性“stdout”,因为子流程.call输出不是我需要使用的Popen对象 ... Open file here ... try: result = subprocess.call(cmd
subprocess.call()
实现一个计时器,并使用subprocess.Popen()
检索输出。但是,我需要定时器和输出结果
有没有办法做到这一点
下面的代码给了我一个属性错误:“int”对象没有属性“stdout”
,因为子流程.call
输出不是我需要使用的Popen对象
... Open file here ...
try:
result = subprocess.call(cmd, stdout=subprocess.PIPE, timeout=30)
out = result.stdout.read()
print (out)
except subprocess.TimeoutExpired as e:
print ("Timed out!")
... Write to file here ...
任何帮助都将不胜感激。在
subprocess.call()
的文档中,我注意到的第一件事是:
注:
不要将stdout=PIPE或stderr=PIPE用于此函数。由于当前进程中没有读取管道,如果子进程生成足够的输出到管道以填充OS管道缓冲区,则子进程可能会阻塞
接下来是文档中的第一行
运行args描述的命令。等待命令完成,然后返回returncode属性
subprocess.call
将返回“退出代码”,一个int
,通常0=成功,1=出错,等等
有关退出代码的更多信息
由于您需要计时器的“输出”,因此可能需要恢复到
timer_out = subprocess.Popen(command, shell=True, stdout=PIPE, stderr=PIPE, universal_newlines=True)
stout, sterror = timer_out.communicate()
…或类似的东西。除非需要,否则不要使用
shell=True
。OP也可以使用子流程。检查输出()
@J.F.Sebastian,你说得对,我的疏忽。