Dav*_*ano 57 python subprocess popen os.execl
我有一个python脚本,必须为dir中的每个文件启动一个shell命令:
import os
files = os.listdir(".")
for f in files:
os.execlp("myscript", "myscript", f)
Run Code Online (Sandbox Code Playgroud)
这适用于第一个文件,但在"myscript"命令结束后,执行停止并且不会返回到python脚本.
我能怎么做?我fork()以前需要calling os.execlp()吗?
use*_*307 92
subprocess:该
subprocess模块允许您生成新进程,连接到它们的输入/输出/错误管道,并获取它们的返回代码.
http://docs.python.org/library/subprocess.html
用法:
import subprocess
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
process.wait()
print process.returncode
Run Code Online (Sandbox Code Playgroud)
Har*_*mbe 60
你可以用subprocess.Popen.有几种方法可以做到:
import subprocess
cmd = ['/run/myscript', '--arg', 'value']
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
for line in p.stdout:
print line
p.wait()
print p.returncode
Run Code Online (Sandbox Code Playgroud)
或者,如果您不关心外部程序实际执行的操作:
cmd = ['/run/myscript', '--arg', 'value']
subprocess.Popen(cmd).wait()
Run Code Online (Sandbox Code Playgroud)
def*_*ode 12
自2008年以来,特别是子模块一路上过来check_call,并check_output进行简单的子东西更容易.该check_*系列函数是很好的它,他们如果出现错误,引发异常.
import os
import subprocess
files = os.listdir('.')
for f in files:
subprocess.check_call( [ 'myscript', f ] )
Run Code Online (Sandbox Code Playgroud)
生成的任何输出myscript都将显示为您的进程生成输出(技术上myscript和您的python脚本共享相同的标准输出).有几种方法可以避免这种情况.
check_call( [ 'myscript', f ], stdout=subprocess.PIPE )myscript产生超过4k的输出).除非您添加选项,否则仍将显示stderr stderr=subprocess.PIPE.check_output( [ 'myscript', f ] )check_output将stdout作为字符串返回,因此未显示.除非您添加选项,否则仍会显示stderr stderr=subprocess.STDOUT.| 归档时间: |
|
| 查看次数: |
149271 次 |
| 最近记录: |