您的位置:首页 > 其它

subprocess的一些用法总结(不记得转载地址了)

2015-12-23 10:42 344 查看
import subprocess

subprocess.call(['ls', '-1'], shell=True)  #call类似于os.system()执行外部命令,而且他也支持定义的变量比如echo $HOME'
subprocess.check_call(['false'])  #这个false命令会返回一个exitcode不为0的结果,她会被捕捉raise
output = subprocess.check_output(['ls', '-1'])  #捕获执行结果输出
print 'Have %d bytes in output' % len(output)
output = subprocess.check_output(
'echo to stdout; echo to stderr 1>&2; exit 1',   #因为重定向了输出,输出流数据不被记录,错误输出流被记录
shell=True,
)
output = subprocess.check_output(
'echo to stdout; echo to stderr 1>&2; exit 1',
shell=True,
stderr=subprocess.STDOUT,   #错误输出也被重定向,只会打印check捕捉到的退出代码不是0的异常
)
print 'Have %d bytes in output' % len(output)
print output
print '\nread:'
proc = subprocess.Popen(['echo', '"to stdout"'],   Popen类似于os.popen,将输出,输入,错误定向到管道
stdout=subprocess.PIPE,  #将输出流定向到管道
)
stdout_value = proc.communicate()[0]  #获取数据
print '\tstdout:', repr(stdout_value)
import subprocess

print '\nwrite:'
proc = subprocess.Popen(['cat', '-'],
stdin=subprocess.PIPE,  #输入流定向到管道
)
proc.communicate('\tstdin: to stdin\n')
print '\npopen2:'

proc = subprocess.Popen(['cat', '-'],
stdin=subprocess.PIPE,  #同时定向输出输入流
stdout=subprocess.PIPE,
)
stdout_value = proc.communicate('through stdin to stdout')[0]
print '\tpass through:', repr(stdout_value)
print '\npopen3:'
proc = subprocess.Popen('cat -; echo "to stderr" 1>&2',
shell=True,
stdin=subprocess.PIPE,  ##同时定向输出输入错误流
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
stdout_value, stderr_value = proc.communicate('through stdin to stdout')
print '\tpass through:', repr(stdout_value)
print '\tstderr      :', repr(stderr_value)
print '\npopen4:'
proc = subprocess.Popen('cat -; echo "to stderr" 1>&2',
shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,  #把错误流定向到输出流,那么错误流就是none
)
stdout_value, stderr_value = proc.communicate('through stdin to stdout\n')
print '\tcombined output:', repr(stdout_value)
print '\tstderr value   :', repr(stderr_value)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: