subprocess模块源码介绍
创新互联建站-专业网站定制、快速模板网站建设、高性价比个旧网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式个旧网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖个旧地区。费用合理售后完善,十载实体公司更值得信赖。介绍
subprocess生成新的进程,连接input/output管道,并获取返回码.
常用函数 |
subprocess.run() | 执行指定命令完成并返回一个包含执行结果的CompletedProcess类的实例。. |
---|---|---|
call() | 执行指定的命令,返回命令执行状态 | |
check_call() | 执行指定的命令,如果执行成功则返回状态码,否则抛出异常 | |
check_output() | 执行指定的命令,如果执行状态码为0则返回命令执行结果,否则抛出异常 | |
getoutput(cmd) | 接收字符串格式的命令,执行命令并返回执行结果 | |
getstatusoutput(cmd) | 执行cmd命令,返回一个元组(命令执行状态,命令执行结果输出) | |
参数说明
subprocess.CompletedProcess类介绍
表示的是一个已结束进程的状态信息.包含属性如下:
示例
In [2]: subprocess.run(["ls","-l"])
-rw-r--r-- 1 liyuanjie liyuanjie 1350 12月 15 18:33 wireshark.md
Out[2]: CompletedProcess(args=['ls', '-l'], returncode=0)
In [3]: subprocess.run(["ls","-l","/dev/null"],stdout=subprocess.PIPE)
Out[3]: CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'
crw-rw-rw- 1 root root 1, 3 12\xe6\x9c\x88 15 07:51 /dev/null\n')
- call()
In [4]: subprocess.call(['ls','-l'])
In [5]: subprocess.call('ls -l',shell=True)
In [6]: subprocess.call(['ls','-l'],stdout=subprocess.DEVNULL)
Out[6]: 0
In [7]: subprocess.call(['ls','-l','/services'])
- check_call()
In [9]: subprocess.check_call(['ls','-l'])
In [10]: subprocess.check_call('ls -l',shell=True)
In [11]: subprocess.check_call('ls -l /services',shell=True)
- check_output()
In [12]: ret = subprocess.check_output(['ls','-l'])
In [13]: print(ret) 返回的是字节序列.
In [14]: ret = subprocess.check_output(['ls','-l'],universal_newlines=True)
In [15]: print(ret) 返回的是字符串.
- getoutput()与getstatusoutput()
In [16]: ret = subprocess.getoutput('ls -l')
In [17]: print(ret)
正确情况下:
In [18]: retcode,output = subprocess.getstatusoutput('ls -l')
In [19]: print(retcode)
0
In [20]: print(output)
错误情况下:
In [21]: retcode,output = subprocess.getstatusoutput('ls -l /test')
In [22]: print(retcode)
2
In [23]: print(output)
ls: cannot access '/test': No such file or directory
该类用于在一个新的进程中执行一个子程序.由于subprocess模块底层的进程创建和管理是由Popen类来处理的. 可以通过subprocess.Popen类提供的灵活的api来完成.
Popen的构造函数
参数说明
Popen类的实例可调用的方法
Popen.poll() | 检查命令是否已经执行结束. |
---|---|
wait(timeout=None) | 等待子进程结束,返回状态码. |
communicate() | 与进程进行交互. |
send_signal(signal) | 发送指定的信号给这个子进程 |
terminate() | 停止该子进程. |
kill() | 杀死该子进程. |
示例
In [25]: p = subprocess.Popen('df -hT',stdout=subprocess.PIPE,shell=True)
In [26]: print(p.stdout.read())
In [2]: p1 = subprocess.Popen(['df','-Th'],stdout=subprocess.PIPE)
In [3]: p2 = subprocess.Popen(['grep','dev'],stdin=p1.stdout,stdout=subprocess.PIPE)
In [4]: out,err = p2.communicate()
In [5]: print(out)
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。