我想创建一个流程的子流程。
什么是一个展示如何实现这个目标的工作示例?
答案 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
。
答案 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