[Python]subprocess-call、check_call、check_output

来源:互联网 发布:c语言 http post json 编辑:程序博客网 时间:2024/06/05 10:40

  • 简介
  • 快捷函数
    • call
    • check_call
    • check_output

原始出处:http://blog.csdn.net/a464057216/article/details/47355219

简介

subprocess模块用来创建新的进程,连接到其stdin、stdout、stderr管道并获取它们的返回码。subprocess模块的出现是为了替代如下旧模块及函数:os.systemos.spawn*os.popen*popen2.*commands.*。强烈建议POSIX用户(Linux、BSD等)安装并使用较新的subprocess32模块,而不是Python 2.7自带的subprocess。

快捷函数

推荐用户使用callcheck_callcheck_output这三个快捷函数,在无法满足需求的时候才使用更高级的Popen接口。

call

subprocess.call(args, *, stdin= None, stdout = None, stderr = None, shell = False)
运行由args参数提供的命令,等待命令执行结束并返回返回码。args参数由字符串形式提供且有多个命令参数时,需要提供shell=True参数:

  1 res = subprocess.call('ls')  2 print 'res:', res

或者:

res = subprocess.call('ls -l', shell = True)print  'res:', res

多个命令参数通过列表的形式提供时不需要提供shell=True参数:

res = subprocess.call(['ls', '-l'])print  'res:', res

注意不要为stdout和stderr参数赋值subprocess.PIPE,如果子进程输出量较多会造成死锁,这两个参数可以赋值为subprocess.STDOUT打印到屏幕或者赋值为一个文件对象将输出写入文件:

//test.pyimport subprocess as spsp.call('python run.py', shell = True, stdin=open('fake_input', 'r'), stdout=open('result', 'w'))
//run.pyi = int(raw_input("Input a number:"))print "You input number:", i

运行test.py后result中内容为:

Input a number:You input number: 12

check_call

subprocess.check_call(args, *, stdin = None, stdout = None, stderr = None, shell = False)
与call方法类似,不同在于如果命令行执行成功,check_call返回返回码0,否则抛出subprocess.CalledProcessError异常。
subprocess.CalledProcessError异常包括returncode、cmd、output等属性,其中returncode是子进程的退出码,cmd是子进程的执行命令,output为None。

import subprocesstry:    res = subprocess.check_call(['ls', '('])    print  'res:', resexcept subprocess.CalledProcessError, exc:    print 'returncode:', exc.returncode    print 'cmd:', exc.cmd    print 'output:', exc.output

执行结果:

ls: (: No such file or directoryreturncode: 1cmd: ['ls', '(']output: None

注意:不要为stdout和stderr参数赋值为subprocess.PIPE

check_output

subprocess.check_output(args, *, stdin = None, stderr = None, shell = False, universal_newlines = False)

在子进程执行命令,以字符串形式返回执行结果的输出。如果子进程退出码不是0,抛出subprocess.CalledProcessError异常,异常的output字段包含错误输出:

import subprocesstry:    res = subprocess.check_output('ls xxx',                    stderr = subprocess.STDOUT,                    shell = True)    print  'res:', resexcept subprocess.CalledProcessError, exc:    print 'returncode:', exc.returncode    print 'cmd:', exc.cmd    print 'output:', exc.output

执行结果:

returncode: 1cmd: ls xxxoutput: ls: xxx: No such file or directory

注意:不要为stderr参数赋值为subprocess.PIPE

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 初中生离家出走怎么办 孩子叛逆厌学怎么办 宝宝伤风流鼻涕怎么办 小儿伤风流鼻涕怎么办 小儿着凉流鼻涕怎么办 娃娃感冒流鼻涕怎么办 宝宝反复感冒怎么办 剑三橙戒新赛季怎么办 excel2010要密钥怎么办 电脑没有浏览器怎么办 e浏览器打不开怎么办 无法下载怎么办 谷歌用不了怎么办 怀疑妻子出轨怎么办 不孕育怎么办 妹妹是兄控怎么办 手臂肌肉痛怎么办 微信被限制登录怎么办 机械键盘失灵怎么办 笔记本键盘混乱怎么办 触摸屏按键失灵怎么办 键盘卸载了怎么办 笔记本键盘损坏怎么办 鼠标连键怎么办 甩棍收不回去怎么办 侠客风云传好卡怎么办 电脑卡慢怎么办 网页复制不了怎么办 血压计水银分段怎么办 日文游戏乱码怎么办 电脑乱码怎么办 做人没有底线怎么办 中国人口太多怎么办 秃鬓角怎么办 鬓发长太长怎么办 国际学校学籍怎么办 身体虚耳鸣怎么办 征集志愿没录上怎么办 银杏过敏怎么办 青海高原反应怎么办 青海湖高原反应怎么办