我有一个Python脚本系统调用。我想有一个计时器以及利用呼叫的输出。我一次只能做一个:使用subprocess.call()
实现计时器并使用subprocess.Popen()
检索输出。但是,我需要定时器和输出结果。
有没有办法实现这个目标?
以下代码为我提供Attribute error: 'int' object has no attribute 'stdout'
,因为subprocess.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 ...
任何帮助都将不胜感激。
答案 0 :(得分:1)
在subprocess.call()
的文档中,我注意到的第一件事就是:
注意:
不要将stdout = PIPE或stderr = PIPE与此功能一起使用。由于在当前进程中没有读取管道,子进程可能会阻塞它是否为管道生成足够的输出以填充OS管道缓冲区。
接下来是文档中的第一行
运行args描述的命令。等待命令完成,然后返回returncode属性。
subprocess.call
将返回“退出代码”,int
,通常为0 =成功,1 =出错,等等。
有关退出代码的更多信息... http://www.tldp.org/LDP/abs/html/exitcodes.html
由于您需要来自计时器的“输出”,因此您可能希望恢复为
timer_out = subprocess.Popen(command, shell=True, stdout=PIPE, stderr=PIPE, universal_newlines=True)
stout, sterror = timer_out.communicate()
......或类似的东西。