详解Python调用系统命令的六种方法
2026/9/8 16:47:27 网站建设 项目流程

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

时间更新至, 二零二一年, 一月二十八日, 零九点, 十一分, 三十五秒, 作者为吾非同。

此文详细讲了六种调用系统命令的方法,文中借示例代码作了极为细致的介绍, 对众人的学习或工作有着一定的参考价值, 有需求的朋友跟着小编一同学一学吧。

用来当作胶水语言, 能够较为便利地去执行系统命令, 在其之内被经常使用来执行操作系统命令的存在着os.()、os.popen()、.popen()、.call()、.run()、.()这六种方式。

os.()

函数具备可把字符串转变为命令于服务器上予以运行的能力, 其内在原理是不管哪一条函数在施行的时候, 它都会去创建一个子进程在系统之上执行命令行, 并且子进程的执行最终产生的结果不能够对主进程造成影响。

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

用法:

os.system("command")

示例:

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

输出:

此时, 正在对 192.168.1.101 进行 Ping 操作, 所 ping 的数据具有 32 字节的大小。

由 192.168.1.101 给出的回应是, 字节等于 32, 时间为 8 毫克每秒, 生存时间是 127。

收到来自, 192.168.1.101 的反馈讯息, 其内容为, 字节等于 32, 时间是 2 毫秒, TTL 为 127。

来自 192.168.1.101 的回复: 字节=32 时间=2ms TTL=127

来自 192.168.1.101 的回复: 字节=32 时间=2ms TTL=127

192.168.1.101 的 Ping 统计信息:

用于传输的数据包裹, 其中已发送出去的数量为四个, 已被接收的数量同样是四个, 丢失的数量为零, 也就是丢失率被记作百分之零 (0% 丢失)。

往返行程的估计时间(以毫秒为单位):

最短 = 2ms,最长 = 8ms,平均 = 3ms

with exit code 0

也可以在linux系统下运行

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

os.popen(,mode)

这种调用方式借助管道的形式得以达成, 此函数的返回值是一个能够进行读或者写操作的文件对象(其读写由 mode 决定, mode 的默认值为‘r’), 若 mode 的值为‘r’, 则调用该对象的 read()方法或者()方法能够读取输出内容。

用法:os.popen()

使用os.(cmd)或者os.popen(cmd)呀, 其中前者返回的结果乃是脚本的退出状态码, 而后者的返回数值则是脚本执行进程当中所产生输出之内容。

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

输出:

以太网适配器 以太网:

连接特定的 DNS 后缀 . . . . . . . :

本地链接, IPv6地址, 是, fe81::b0ed:2b1b:7385:97d1%8。

互联网协议第4版地址, 是这样显示过来的结果是, 192点168点1点100。

子网掩码, 其呈现的形式为, 由一系列的数字所构成, 具体为, 255.255.255.0。作为间隔, 以此来表示特定的网络标识范围。

嗯, 那个称为默认网关的东西, 它所对应的具体数值是, 192.168.1.1 , 请注意这里是有特定含义的。

模块

模块是自2.4版本起被引入的那种模块, 主要是用来替换一些旧有的模块方法, 像os.,os.spawn,os.popen,.*等这类。官方建议使用此模块去执行系统命令, 该模块借助子进程来执行外部指令, 并且经由input//error管道, 获取子进程执行后返回的信息。

好处是, 通过应用关于线程的控制以及监控, 把返回的结果赋予一个变量, 这对程序的处理来说是方便的。

.Popen()

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

用法:child = .Popen(

"cmd","arg1"...

常用参数说明:

示例

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

with exit code 0

.call()

按照所指定的命令去执行, 将命令执行状态予以返回, 其功能与os.(cmd)相类似, 参数shell默认设定为False。

用法:.call("")

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

输出:

大小, 已使用, 可用, 使用百分比, 关于。

九百零九兆 , 零 , 九百零九兆 , 百分之零 , /设备。

临时文件系统, 占据920兆字节的空间, 其中已用32千字节, 剩余空间为920兆字节, 使用率为1%, 挂载于/dev/shm目录下。

位于 /run 的 tmpfs, 其大小为 920M, 已用 472K, 可用 919M, 利用率为 1%。

tmpfs, 其大小为920M, 占用量为0, 余下920M, 占比0%, 挂载于/sys/fs/。

位于 /dev/vda1 的分区, 有50G的容量, 已使用6.2G, 还剩余41G, 使用率为14%, 是根目录 / 的挂载分区。

tmpfs, 其大小为184M, 0字节已使用, 184M未使用, 使用率为0%, 挂载于/run/user/0。

.run()

.5里新增的函数, 去执行指定的那种命令, 在等到命令执行完毕之后, 返回一个包含着执行结果的类的实例物件。run在通常情况下面, 是不会返回输出内容的呵, 仅返回命令以及执行状态情况。

用法:

让执行操作, 传入参数, 其中, 标准输入设为无, 给定输入设为无, 其他设为无, 其他设为无, 是否使用 shell 设为否, 让某情况设为无, 用于校验的设为否, 并且另设为否。

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

.()

进行cmd命令的执行动作, 返回一组包含命令执行具体状态以及命令执行之后结果输出情况的元组。

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

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

输出:

正在 Ping

14.215.177.39

具有 32 字节的数据:

回复来自 14, 2, 15, 177, 39, 字节等于 32, 时间是 29 毫秒, 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

关于模块的具体用法,大家可以查看文档进行学习。

这篇文章是关于详解调用系统命令的六种方法的, 到此就介绍到这儿了, 更多相关调用系统命令的内容,若搜索脚本之家以前的文章, 或者继续浏览下面的相关文章的话, 希望大家以后能多多支持脚本之家!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询