• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Python实现系统交互(subprocess)

python 搞代码 4年前 (2022-01-08) 51次浏览 已收录 0个评论

我们几乎可以在任何操作系统上通过命令行指令与操作系统进行交互,本文实现了Python系统交互,具有一定的参考价值,感兴趣的可以了解一下

我们几乎可以在任何操作系统上通过命令行指令与操作系统进行交互,比如Linux平台下的shell。那么我们来源gaodai$ma#com搞$代*码*网如何通过Python来完成这些命令行指令的执行呢?另外,我们应该知道的是命令行指令的执行通常有两个我们比较关注的结果:

  • 命令执行的状态码–表示命令执行是否成功
  • 命令执行的输出结果–命令执行成功后的输出

早期的Python版本中,我们主要是通过os.system()、os.popen().read()等函数来执行命令行指令的,另外还有一个很少使用的commands模块。但是从Python 2.4开始官方文档中建议使用的是subprocess模块,所以os模块和commands模块的相关函数在这里只提供一个简单的使用示例,我们重要要介绍的是subprocess模块。

一、os与commands模块

Python中提供了以下几个函数来帮助我们完成命令行指令的执行:

函数名 描述
os.system(command) 返回命令执行状态码,而将命令执行结果输出到屏幕
os.popen(command).read() 可以获取命令执行结果,但是无法获取命令执行状态码
commands.getstatusoutput(command) 返回一个元组(命令执行状态码, 命令执行结果)

说明:

os.popen(command)函数得到的是一个文件对象,因此除了read()方法外还支持write()等方法,具体要根据command来定;
commands模块只存在于Python 2.7中,且不支持windows平台,因此commands模块很少被使用。另外,commands模块实际上也是通过对os.popen()的封装来完成的。

1. os.system()函数实例

 >>> import os >>> >>> retcode = os.system('dir') 驱动器 C 中的卷没有标签。 卷的序列号是 4C32-B292 C:\Users\wader\PycharmProjects\LearnPython 的目录 2017/03/21  11:15              . 2017/03/21  11:15              .. 2017/07/29  18:04              .idea 2016/12/06  11:19              blog 2016/12/06  11:42              day01 2016/12/09  22:07              day02 2017/01/04  09:14              day03 2017/07/19  16:11              day04 2017/07/29  14:44              day05 2017/07/06  14:45              day06 2017/07/06  17:13              exam01 0 个文件              0 字节 11 个目录  6,659,977,216 可用字节 >>> retcode 0 >>>

2. os.popen()函数实例

 >>> import os >>> >>> ret = os.popen('dir').read() >>> print(ret) 驱动器 C 中的卷没有标签。 卷的序列号是 4C32-B292 C:\Users\wader\PycharmProjects\LearnPython 的目录 2017/03/21  11:15              . 2017/03/21  11:15              .. 2017/07/29  18:04              .idea 2016/12/06  11:19              blog 2016/12/06  11:42              day01 2016/12/09  22:07              day02 2017/01/04  09:14              day03 2017/07/19  16:11              day04 2017/07/29  14:44              day05 2017/07/06  14:45              day06 2017/07/06  17:13              exam01 0 个文件              0 字节 11 个目录  6,664,052,736 可用字节 >>>

3. commands.getstatusoutput()函数实例

需要注意的是commands模块不支持windows平台,因此该实例是在Linux平台下执行的

 >>> import os >>> os.system('ls') cmdline-jmxclient-0.10.3.jar  dhparam.pem  FtpMan.class  gitlab.crt  gitlab.csr  gitlab.key  resolv.txt  test.json  test.php  test.sh  test.text  test.txt 0 >>> import commands >>> retcode, ret = commands.getstatusoutput('ls -l') >>> retcode 0 >>> print(ret) total 68 -rw-r--r-- 1 root root 20124 Jul 11  2016 cmdline-jmxclient-0.10.3.jar -rw-r--r-- 1 root root   424 Aug 22  2016 dhparam.pem -rw-r--r-- 1 root root  2576 Jul 13  2016 FtpMan.class -rw-r--r-- 1 root root  1302 Aug 22  2016 gitlab.crt -rw-r--r-- 1 root root  1054 Aug 22  2016 gitlab.csr -rw-r--r-- 1 root root  1675 Aug 22  2016 gitlab.key -rw-r--r-- 1 root root  9329 Jun 24  2016 resolv.txt -rw-r--r-- 1 root root   594 Mar  7 08:14 test.json -rw-r--r-- 1 root root   162 Jun 28 10:39 test.php -rw-r--r-- 1 root root   760 Jun 24  2016 test.sh -r-x------ 1 root root     0 Feb  6 08:21 test.text drwxr-xr-x 2 root root  4096 Feb  7 16:43 test.txt >>> 

通过查看commands模块提供的属性可知,它也提供了单独获取命令执行状态码和执行结果的函数,如下所示:

 >>> dir(commands) ['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'getoutput', '

以上就是Python实现系统交互(subprocess)的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python实现系统交互(subprocess)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址