Python:使用subprocess.call获取输出,不是Popen
Python: Obtain output using subprocess.call, not Popen
我有一个从 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 ...
如有任何帮助,我们将不胜感激。
在 subprocess.call()
的文档中,我注意到的第一件事是:
Note:
Do not use stdout=PIPE or stderr=PIPE with this function. As the pipes are not being read in the current process, the child process may block if it generates enough output to a pipe to fill up the OS pipe buffer.
接下来是文档中的第一行
Run the command described by args. Wait for command to complete, then return the returncode attribute.
subprocess.call
将 return "exit code",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()
...或类似的东西。
我有一个从 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 ...
如有任何帮助,我们将不胜感激。
在 subprocess.call()
的文档中,我注意到的第一件事是:
Note:
Do not use stdout=PIPE or stderr=PIPE with this function. As the pipes are not being read in the current process, the child process may block if it generates enough output to a pipe to fill up the OS pipe buffer.
接下来是文档中的第一行
Run the command described by args. Wait for command to complete, then return the returncode attribute.
subprocess.call
将 return "exit code",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()
...或类似的东西。