如何在Python中创建子流程?

时间:2010-12-20 09:16:54

标签: python subprocess

我想创建一个流程的子流程。

什么是一个展示如何实现这个目标的工作示例?

6 个答案:

答案 0 :(得分:6)

subprocess文档开始。

如果您想获得输出:

>>> import subprocess
>>> output = subprocess.Popen(['uname', '-a'], stdout=subprocess.PIPE).communicate()[0]
>>> output
'Linux'

如果你只想打电话而不是处理输出:

>>> subprocess.call(['echo', 'Hi'])
Hi
0

subprocess.check_call是相同的,除非它在使用无效参数调用命令时抛出CalledProcessError

A good subprocess tutorial

答案 1 :(得分:1)

import subprocess

subprocess.call(['echo', 'hello world'])

答案 2 :(得分:1)

启动和监控子流程:

import subprocess, time, os, signal
args=['/usr/bin/vmstat','-n','2']
app=subprocess.Popen(args=args, stdout=open('somefile','w'))
print "Your app's PID is %s. You can now process data..." % app.pid
time.sleep(5)
if app.poll() == None: print "Process is still running after 5s."
print "The app outputed %s bytes." % len(open('somefile','r').read())
print "Stopping the process..."
os.kill(app.pid, signal.SIGTERM)

还有更多内容。只需查看Popen文档。

答案 3 :(得分:1)

如果您想运行一个简单的命令而不是提供一个单独的文件,这对我很有效

import subprocess
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
process.wait()
print process.returncode

要获取流程的返回码,您可以使用process.returncode 要获得回复,您可以使用process.communicate()

以防万一,您可以使用command="ls"

如果您获得的是returncode以外的0,则可以在此处检查该错误代码的含义:http://tldp.org/LDP/abs/html/exitcodes.html

有关子流程的更多详细信息:http://docs.python.org/library/subprocess.html

答案 4 :(得分:0)

if os.name == 'nt':
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess._subprocess.STARTF_USESHOWWINDOW
subprocess.call(os.popen(tempFileName), shell=True)
os.remove(tempFileName)

答案 5 :(得分:0)

根据user225312的回答,我准备了以下一根衬纸,它可以帮助您测试子流程:

python -c "import subprocess;
output = subprocess.Popen(['uname', '-a'], stdout=subprocess.PIPE).communicate()[0]; 
print output"

结果类似: Linux xxx.xxx.xxx.xxx 3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 29 14:49:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux