Python subprocess模块

subprocess模块

 

subprocess模块用于创建和管理子进程,subprocess提供了Popen类来启动和设置子进程的参数,由于这个类比较复杂,还提供了便利函数。

 

subprocess便利函数, 包括call、check_call和check_output

 

call()

call运行由参数指定的命令知道命令结束,返回值是命令的退出状态码

>>> subprocess.call(["ls", "-l"])
total 16
-rw-r--r-- 1 root root 0 Apr 23 11:40 2.jpg
-rw-r--r-- 1 root root 0 Apr 23 11:40 access.log
-rw-r--r-- 1 root root 0 Apr 23 11:40 a.txt
-rw-r--r-- 1 root root 0 Apr 23 11:40 b.txt
drwxr-xr-x 2 root root 4096 Apr 23 11:40 dir3
drwxr-xr-x 2 root root 4096 Apr 23 11:41 mydir
drwxr-xr-x 2 root root 4096 Apr 23 11:40 newdir
-rw-r--r-- 1 root root 366 Apr 25 18:14 read_file.py

0      ##返回命令退出状态码

 

call函数外部命令以一个字符串列表形式传递,如果设置shell为True,则可以使用一个字符串命令

>>> subprocess.call("ls -l")   ##不能直接执行字符串 
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.5/subprocess.py", line 560, in call
with Popen(*popenargs, **kwargs) as p:
File "/usr/local/lib/python3.5/subprocess.py", line 950, in __init__
restore_signals, start_new_session)
File "/usr/local/lib/python3.5/subprocess.py", line 1540, in _execute_child
raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: 'ls -l'

 

设置shell 为true,pyton将先运行一个shell,在用这个shell解释整个字符串

>>> subprocess.call("ls -l",shell=True)
total 16
-rw-r--r-- 1 root root 0 Apr 23 11:40 2.jpg
-rw-r--r-- 1 root root 0 Apr 23 11:40 access.log
-rw-r--r-- 1 root root 0 Apr 23 11:40 a.txt
-rw-r--r-- 1 root root 0 Apr 23 11:40 b.txt
drwxr-xr-x 2 root root 4096 Apr 23 11:40 dir3
drwxr-xr-x 2 root root 4096 Apr 23 11:41 mydir
drwxr-xr-x 2 root root 4096 Apr 23 11:40 newdir
-rw-r--r-- 1 root root 366 Apr 25 18:14 read_file.py

 

check_call

check_call与call函数类似,区别在于异常情况下返回的形式不同,call函数返回值如果成功,返回0,否则返回非0,对于check_call函数,如果执行成功,返回0,执行失败,返回subprocess.CalledProcessError异常

>>> subprocess.check_call("exit 1",shell=True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.5/subprocess.py", line 584, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1

 

check_output 可以对获取的命令结果进一步处理,或者将命令输出打印到日志文件中

>>> output = subprocess.check_output(["df","-h"])
>>> print(output)
b'Filesystem Size Used Avail Use% Mounted on\n/dev/mapper/vg_vm80-lv_root\n 50G 11G 37G 23% /\ntmpfs 3.0G 0 3.0G 0% /dev/shm\n/dev/sda1 477M 51M 397M 12% /boot\n/dev/mapper/vg_vm80-lv_home\n 240G 60M 228G 1% /home\n'

 

转载于:https://www.cnblogs.com/kubernets/p/8952092.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值