popen函数_解决Python常见的问题:Subprocess的不同函数解析(零基础必看)

以前我一直用os.system()处理一些系统管理任务,因为我认为那是运行linux命令最简单的方式.
我们能从Python官方文档里读到应该用subprocess 模块来运行系统命令.subprocess模块允许我们创建子进程,连接他们的输入/输出/错误管道,还有获得返回值。

950fb1a34d6317dd63a84bd73d5aba2c.png

subprocess模块打算来替代几个过时的模块和函数。

比如: os.system, os.spawn*, os.popen*, popen2.*命令。

让我们来看一下subprocess 有哪些不同的函数:

执行由参数提供的命令.

我们可以用数组作为参数运行命令,也可以用字符串作为参数运行命令(通过设置参数shell=True)

注意,参数shell默认为False

我们用subprocess.call()来做一个统计磁盘的例子:

 subprocess.call(['df', '-h'])

下面的例子把shell设置为True:

 subprocess.call('du -hs $HOME', shell=True)

注意,python官方文档里对参数shell=True陈述了一个警告:

505b81855de848b5b8d239075e72d28f.png

嗨喽:正在学习python的小伙伴或者打算学习的,可以私信小编“07”领取资料!

现在,我们来看看输入与输出

Input and Output

  1. subprocess 模块能阻止输出,当你不关心标准输出的时候是非常方便的.
  2. 它也使你通过一种正确的方式管理输入/输出,有条理地整合python脚本中的的shell命令.

Return Codes

  1. 通过subprocess.call的返回值你能够判定命令是否执行成功
  2. 每一个进程退出时都会返回一个状态码,你可以根据这个状态码写一些代码。

stdin, stdout and stderr

  1. 在使用subprocess 时,有一个微妙的部分是怎么使用管道把命令连接起来.
  2. 管道表明一个新的子管道应该被创建.
  3. 默认的设置为None,意味着没有重定向发生

标准错误可以指向标准输出,表明子进程的错误信息会被捕获到和标准输出同一个文件.

subprocess.Popen()

  1. subprocess 模块中基本的进程创建和管理由Popen 类来处理.
  2. subprocess.popen是用来替代os.popen的.
  3. 我们来做一些真实的例子,subprocess.Popen需要一个数组作为参数:
e51b257370a02adee49dfa5070d963c1.png

嗨喽:正在学习python的小伙伴或者打算学习的,可以私信小编“07”领取资料!

注意,虽然你可以使用 "shell=True",但并不推荐这样的方式.

如果你知道你只用几个有限的函数,比如Popen和PIPE,你可以单单指定这几个函数:

1442f64a46810119883fca9adf47943d.png

Popen.communicate()

communicate()函数返回一个tuple(标准输出和错误).

Popen.communicate() 和进程沟通:发送数据到标准输入.从标准输出和错误读取数据直到遇到结束符.等待进程结束.

输入参数应该是一个字符串,以传递给子进程,如果没有数据的话应该是None.

基本上,当你用 communicate()函数的时候意味着你要执行命令了。

8ae3a1b3504b5fd7da820d26fc7fe75f.png

以上就是本文的全部内容,希望对大家的学习有所帮助!!!

最后,小编想说一句话:我是一名python开发工程师,整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习,面试宝典,面试宝典,面试宝典。想要这些资料的可以关注小编,并在后台私信小编:“07”即可领取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值