我想创建一个进程的子进程。
请提供一个可行的示例,展示如何完成这个任务。
请提供一个可行的示例,展示如何完成这个任务。
从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
。
启动和监控子进程:
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文档即可了解更多信息。
如果您想运行简单的命令而不是提供单独的文件,以下是我使用的方法:
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
import subprocess
subprocess.call(['echo', 'hello world'])
execfile
、线程或多进程,具体取决于你想要做什么。subprocess
用于告诉计算机运行一个完全独立的程序。 - Thomas K根据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
if os.name == 'nt':
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess._subprocess.STARTF_USESHOWWINDOW
subprocess.call(os.popen(tempFileName), shell=True)
os.remove(tempFileName)
Popen
的参数,最好是作为参数。如果你有一个字符串,请使用string.split()
将其拆分,然后将其传递给Popen
。 - user225312stdout=subprocess.PIPE
。 - user225312