Python如何执行系统命令

作者:诸子流 时间:2021-09-25 05:49:02 

一、背景说明

以前就感觉进步的速度和博客的数量成正比,所以很长一段时间内想不通为什么很多博客为什么到最后很少甚至不在更新了,直到最近自己也快成为断更的一员。

这段时间其实碰到和解决了挺多典型的问题,但上班高负荷运转下班没心思周末觉得太耗费时间,就导致一直拖着没写。

但Python执行系统命令这个问题,从学Python之初就一直在困扰,到最近又反复几次在上边遇到问题,实在是受不了。

二、Python执行系统命令的实现方式

2.1 执行命令不需要获取命令输出--os.system

有时候我们只需要执行命令并不需要获取命令的执行输出,此时我们就可以使用os.system()实现。

os.system()是C语言system()函数的封装,返回命令的退出状态码,命令执行结果输出到标准输出(stdout/窗口)。

使用示例如下:


import os

command = "ifconfig"
exit_code = os.system(command)
# 理论上command是一个字符串,但实际看command还是得变为字节数组
# 当命令中存在中文时可能会报编码错误,此时可以自己给命令编一下码
# exit_code = os.system(command.encode("gbk"))

参考:https://docs.python.org/3/library/os.html#os.system

2.2 执行系统命令并获取命令输出--os.popen()

如果我们想要获取命令的输出os.system()是不能实现的,此时可以使用os.popen()来实现。使用示例如下:


import os

command = "ifconfig"
command_output = os.popen(command).readlines()
print(command_output)

2.3 Python3更好的实现方式--subprocess

Python3引入了封装程序更高的subprocess模块。使用示例如下:


import subprocess

command = "ifconfig"
# 命令如果带参数则不能直接使用字符串的形式,不然后报FileNotFoundError: [Errno 2] No such file or directory: 'ifconfig -a'等错误
# 此时有两种处理办法,一种是写成以空格为分割的列表形式。可借助shlex.split(command_line)实现自动分割
# command = ["ifconfig", "-a"]
# 别一种是将shell参数置为True
# completed_process_obj = subprocess.run(command, shell=True)
# 当配置了stdout参数,completed_process_obj的stdout属性就会保存命令的输出
completed_process_obj = subprocess.run(command, stdout=subprocess.PIPE)
print(completed_process_obj.stdout.decode())
# subprocess.Popen()基础参数和run()差不多,比run()对命令进程有更强的控制能力。其也能用来获取命令输出
# popen_obj = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
# print(popen_obj.stdout.readlines())
# 其他如subprocess.call()、subprocess.check_call()、subprocess.check_output()都是旧方法了,Python3.5+都建议用run()

参考:https://docs.python.org/3/library/os.html#os.popen

来源:https://www.cnblogs.com/lsdb/p/13068187.html

标签:python,执行,系统,命令
0
投稿

猜你喜欢

  • Python 调用PIL库失败的解决方法

    2023-01-25 02:47:08
  • python如何实现word批量转HTML

    2023-11-04 06:28:41
  • python基础while循环及if判断的实例讲解

    2021-02-18 06:56:06
  • python中ASCII码和字符的转换方法

    2021-04-06 13:22:04
  • 完美卸载Oracle数据库

    2024-01-18 02:50:27
  • python 控制语句

    2022-09-19 08:12:02
  • SQL Server日志文件总结及日志满的处理

    2009-03-25 16:17:00
  • 解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题

    2021-05-13 00:29:01
  • python代码打印100-999之间的回文数示例

    2022-10-14 02:53:39
  • python实现一个简单的贪吃蛇游戏附代码

    2022-10-21 13:27:30
  • Python configparser模块常用方法解析

    2021-07-08 17:31:11
  • PHP+jQuery翻板抽奖功能实现

    2024-05-05 09:17:43
  • linux 后台日志 mysql 错误异常的解释(推荐)

    2024-01-26 06:01:42
  • 深入浅析python3 依赖倒置原则(示例代码)

    2021-07-30 02:27:33
  • Python的函数的一些高阶特性

    2022-06-04 15:06:28
  • MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程

    2024-01-24 05:14:17
  • python删除文件夹下相同文件和无法打开的图片

    2023-03-09 19:26:42
  • 详解Javascript 装载和执行

    2024-04-18 09:41:02
  • Python3中的最大整数和最大浮点数实例

    2021-04-05 01:37:16
  • Spark中的数据读取保存和累加器实例详解

    2022-09-13 19:26:46
  • asp之家 网络编程 m.aspxhome.com