详解Python调用系统命令的六种方法


Posted in Python onJanuary 28, 2021

作为胶水语言,Python可以很方便的执行系统命令,Python3中常用的执行操作系统命令有os.system()、os.popen()、subprocess.popen()、subprocess.call()、subprocess.run()、subprocess.getstatusoutput()六种方法。

os.system()

system函数可以将字符串转化成命令在服务器上运行;其原理是每一条system函数执行时,其会创建一个子进程在系统上执行命令行,子进程的执行结果无法影响主进程。

其返回值是指令运行后返回的状态码,0表示指令成功执行,1表示失败,256表示没有返回结果,该方法适用于系统命令不需要输出内容的场景。

用法:

os.system("command")

示例:

import os
a=os.system("ping 192.168.1.101") #使用a接收返回值
print(a)

输出:

正在 Ping 192.168.1.101 具有 32 字节的数据:
来自 192.168.1.101 的回复: 字节=32 时间=8ms TTL=127
来自 192.168.1.101 的回复: 字节=32 时间=2ms TTL=127
来自 192.168.1.101 的回复: 字节=32 时间=2ms TTL=127
来自 192.168.1.101 的回复: 字节=32 时间=2ms TTL=127

192.168.1.101 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 2ms,最长 = 8ms,平均 = 3ms
0
Process finished with exit code 0

也可以在linux系统下运行

import os
os.system('cd /home && mkdir test') 执行多条命令可以使用&&连接

os.popen(command,mode)

这种调用方式是通过管道的方式来实现,这个函数的返回值是一个文件对象,可以读或者写(由mode决定,mode默认是'r')。如果mode为'r',调用该对象的read()或readlines()方法可以读取输出内容。

用法:os.popen(command[, mode[, bufsize]])

os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码,后者的返回值是脚本执行过程中的输出内容。

import os
a=os.popen("ipconfig")
print(a.read())

输出:
以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe81::b0ed:2b1b:7385:97d1%8
   IPv4 地址 . . . . . . . . . . . . : 192.168.1.100
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.1.1

subprocess模块

subprocess模块是python从2.4版本开始引入的模块,主要用来取代 一些旧的模块方法,如os.system、os.spawn、os.popen、commands.*等。官方推荐使用该模块执行系统命令,subprocess模块通过子进程来执行外部指令,并通过input/output/error管道,获取子进程的执行的返回信息。

好处在于:运用对线程的控制和监控,将返回的结果赋于一变量,便于程序的处理。

subprocess.Popen()

使用Popen可以创建进程,并与进程进行复杂的交互。

用法:child = subprocess.Popen(["cmd","arg1"...])

常用参数说明:

详解Python调用系统命令的六种方法

示例

from subprocess import PIPE, Popen

# 返回的是 Popen 实例对象
proc = Popen(
  'ipconfig', # cmd特定的查询空间的命令
  stdin=None, # 标准输入 键盘
  stdout=PIPE, # -1 标准输出(演示器、终端) 保存到管道中以便进行操作
  stderr=PIPE, # 标准错误,保存到管道
  shell=True)

# print(proc.communicate()) # 标准输出的字符串+标准错误的字符串
outinfo, errinfo = proc.communicate()
print(outinfo.decode('gbk')) # 外部程序(windows系统)决定编码格式
print(errinfo.decode('gbk'))

输出:

以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe81::b0ed:2b1b:7385:97d1%8
   IPv4 地址 . . . . . . . . . . . . : 192.168.1.100
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.1.1

Process finished with exit code 0

subprocess.call()

执行指定的命令, 返回命令执行状态, 功能类似os.system(cmd),参数shell默认为False

用法:subprocess.call("command")

# linux获取磁盘空间
import subprocess
subprocess.call(['df', '-h']) # 数组作为参数运行命令

输出:
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        909M     0  909M   0% /dev
tmpfs           920M   32K  920M   1% /dev/shm
tmpfs           920M  472K  919M   1% /run
tmpfs           920M     0  920M   0% /sys/fs/cgroup
/dev/vda1        50G  6.2G   41G  14% /
tmpfs           184M     0  184M   0% /run/user/0

subprocess.run()

python3.5中新增的函数, 执行指定的命令, 等待命令执行完成后返回一个包含执行结果的CompletedProcess类的实例。run默认不会返回输出,只返回命令和执行状态。

用法:

subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False, universal_newlines=False)

import subprocess
completed = subprocess.run(['ls', '-1'])
print('returncode:', completed.returncode)

subprocess.getstatusoutput()

执行cmd命令,返回一个元组(命令执行状态,命令执行结果输出)。

返回状态码和结果,0表示成功

import subprocess
ret, val = subprocess.getstatusoutput("ping www.baidu.com")
print(ret)
print(val)

输出:
0

正在 Ping www.a.shifen.com [14.215.177.39] 具有 32 字节的数据:
来自 14.215.177.39 的回复: 字节=32 时间=29ms TTL=53
来自 14.215.177.39 的回复: 字节=32 时间=29ms TTL=53
来自 14.215.177.39 的回复: 字节=32 时间=29ms TTL=53
来自 14.215.177.39 的回复: 字节=32 时间=30ms TTL=53

14.215.177.39 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 29ms,最长 = 30ms,平均 = 29ms

关于subprocess模块的具体用法,大家可以查看文档进行学习https://docs.python.org/3/library/subprocess.html。

到此这篇关于详解Python调用系统命令的六种方法的文章就介绍到这了,更多相关Python调用系统命令内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Windows系统配置python脚本开机启动的3种方法分享
Mar 10 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
Sep 12 Python
python cx_Oracle的基础使用方法(连接和增删改查)
Nov 19 Python
Python3.遍历某文件夹提取特定文件名的实例
Apr 26 Python
Python图像处理之简单画板实现方法示例
Aug 30 Python
使用python判断你是青少年还是老年人
Nov 29 Python
导入tensorflow时报错:cannot import name 'abs'的解决
Oct 10 Python
Python : turtle色彩控制实例详解
Jan 19 Python
基于Python3.7.1无法导入Numpy的解决方式
Mar 09 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
Mar 18 Python
教你用Python matplotlib库制作简单的动画
Jun 11 Python
python index() 与 rindex() 方法的使用示例详解
Dec 24 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
Jan 28 #Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
Jan 28 #Python
Python中Pyspider爬虫框架的基本使用详解
Jan 27 #Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
Jan 27 #Python
一个入门级python爬虫教程详解
Jan 27 #Python
python+selenium爬取微博热搜存入Mysql的实现方法
Jan 27 #Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
Jan 27 #Python
You might like
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
php实现转换ubb代码的方法
2015/06/18 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
ThinkPHP中数据操作案例分析
2015/09/27 PHP
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
PHP支付系统设计与典型案例分享
2016/08/02 PHP
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
js日历功能对象
2012/01/12 Javascript
javascript图像处理—仿射变换深度理解
2013/01/16 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
Vue 父子组件、组件间通信
2017/03/08 Javascript
详解nodejs微信公众号开发——4.自动回复各种消息
2017/04/11 NodeJs
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
Vue全局分页组件的实现代码
2018/08/10 Javascript
js实现简单模态框实例
2018/11/16 Javascript
webpack 代码分离优化快速指北
2019/05/18 Javascript
bootstrap中的导航条实例代码详解
2019/05/20 Javascript
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
python自动安装pip
2014/04/24 Python
python连接mongodb密码认证实例
2018/10/16 Python
Python微信操控itchat的方法
2019/05/31 Python
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
Python tkinter模版代码实例
2020/02/05 Python
Pycharm新手使用教程(图文详解)
2020/09/17 Python
python Pexpect模块的使用
2020/12/25 Python
CSS3绘制六边形的简单实现
2016/08/25 HTML / CSS
什么时候用assert
2015/05/08 面试题
护理专业优质毕业生自荐书
2014/01/31 职场文书
2014政务公开实施方案
2014/02/19 职场文书
商家认证委托书格式
2014/10/16 职场文书
首次购房证明
2015/06/19 职场文书
安全责任协议书范本
2016/03/23 职场文书
2016年党员岗位承诺书
2016/03/24 职场文书
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS