我们几乎可以在任何操作系统上通过命令行指令与操作系统进行交互,本文实现了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搞代码网其它相关文章!