Python实现Shell脚本

简述

python 调用 方法 实现 shell命令的执行,其是 开启了一个子进程。
从Python 2.4开始,Python引入subprocess模块来管理子进程,以取代一些旧模块的方法:如 os.system、os.spawn、os.popen
不但可以调用外部的命令作为子进程,而且可以 连接到子进程 的input/output/error管道,获取相关的返回信息。
所以 os.system或者os.popen等模块,放弃它们吧。

其中最有用的是 call(执行系统命令)、check_call(执行结果不为0则抛出异常)、
check_output(最方便的获取执行的输出的函数)、Popen+PIPE(支持管道的多命令执行)。

栗子

  • call

会开启一个 子进程 去执行,并且 等待子进程结束 才继续执行其他的,使用起来非常方便

import subprocess

res = subprocess.call(["ls", "-al"])
print("\n")
# args参数(call的第一个参数) 由字符串形式提供且有 多个命令参数时,需要提供 shell=True 参数:
res = subprocess.call("ls -al", shell=True)
  • check_call

与call方法类似,不同在于如果命令行 执行成功,check_call返回返回码0,
执行失败 就会 抛出 subprocess.CalledProcessError 异常。
subprocess.CalledProcessError 异常包括returncode、cmd、output等属性,
其中returncode是子进程的退出码,cmd是子进程的执行命令,output为None。

import subprocess

try:
    res = subprocess.check_call(['ls', '?'])
    print  'res:', res
except subprocess.CalledProcessError as e:
    print('returncode:', e.returncode)
    print('cmd:', e.cmd)
    print('output:', e.output)

# 输出:
'''
ls: 无法访问'?': 没有那个文件或目录
returncode: 2
cmd: ['ls', '?']
output: None
'''
  • Popen

与call方法类似,不同在于 Popen 是无阻塞的,会和主程序并行运行,
而 call 必须 等待命令执行完毕 再执行 后面的 代码。

import subprocess

res = subprocess.Popen("ls -al", shell=True)
print(res)
print(123)

# 说明:
'''
先执行 两个 print ,然后再 执行 命令, 所以输出是:

	<subprocess.Popen object at 0x7f10929cf048>
	123
	总用量 60
	drwxr-xr-x 8 hero hero 4096 7月   6 17:37 .
	drwxr-xr-x 6 hero hero 4096 4月  12 13:48 ..
	drwxr-xr-x 5 hero hero 4096 7月   6 17:35 aaa
	-rw-r--r-- 1 hero hero 1008 7月   6 16:47 aaa.py
'''
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值