我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【Python】在代码中执行终端命令并获取输出和运行状态

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【Python】在代码中执行终端命令并获取输出和运行状态

文章目录

0 前言

  在Python编程过程中,我们可能会遇到需要在终端命令行执行某个命令并获取其输出的操作,我们首先想到可能就是C语言中的system("pause");语句,确实,python当中也有类似的命令,同时,为了满足进一步的需求,比如判断指令是否执行完毕或者是得到执行输出的内容。

1 os库

1.1 os.system

  这个指令仅在终端运行该指令,不能获取命令行返回的信息,但是它会在输出终端显示命令执行的输出。

# test.pyprint("Hello")# run.pyimport oscmd = "python test.py"os.system(cmd)# output:Hello

这个操作是会堵塞程序执行

1.2 os.popen

  os.popen不仅可以执行命令,还可以返回执行结果

# test.pyprint("Hello")# run.pyimport oscmd = "python test.py"out = os.popen(cmd)print(out.readlines())# output:['Hello\n']

  不过,这个库需要注意的是,如果命令执行输出有中文掺杂,最好不要使用这个命令,它的编码可能会存在一定问题。

2 subprocess库

  subprocess库主要功能是输入输出流,在VS Code中打开它的说明,如下图所示。

在这里插入图片描述

从图中可以看出这个库的主要两个函数接口是runPopen,往下翻还可以找到它其他的一些比较老的函数。这里介绍这两种主要函数的使用。

2.1 subprocess.run

  根据上面的subprocess的说明,可以知道,run函数可以在命令行运行一个指令,并等待它运行完毕,并返回一个“已结束进程的实例”。这个函数的参数比较多,这里简单介绍几个。

在这里插入图片描述

args :  需要执行的命令行(cmd命令行,不是shell)stdout :  命令执行完的输出,可以设置为一个文件对象,或者是它自带的类PIPEstderr :  命令行执行完的报错信息,参数设置和stdout一样encoding :  编码设置,因为它默认的输出都是bytes,十六进制的,加上这个可以转换成字符串格式,如果不加上这个也可以在获取输出时decode一下,变成字符串。shell :  这个似乎不是指定在powershell中执行,但一般会加上 shell = True

  下面是一个简单的实例

# test.pyprint("Hello")# run.pyimport subprocesscmd = "python test.py"b = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE).stdoutprint(b.decode('gbk')) 

  需要注意,这里要使用gbk的编码方式,这个可能是和subprocess这个库有关,它内部默认使用的终端是cmd终端,编码方式有些特殊。如果使用默认的utf-8解码会出现报错 ‘utf-8’ codec can’t decode byte 0xb9 in position 0: invalid start byte ,具体原理和解决方式可以参考这篇博客

2.2 subprocess.Popen

  Popen函数和run函数非常相似,但是它执行命令时是新开一个进程,而不是像run函数一样堵塞执行,因此用Popen可以实现同时执行多条指令(但也不能太多)。此外Popen的返回值可以调用wait函数来查看指令执行状态,判断是否执行完毕。

3 参考链接

来源地址:https://blog.csdn.net/ZHOU_YONG915/article/details/128841045

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【Python】在代码中执行终端命令并获取输出和运行状态

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python中windows怎么链接linux执行命令并获取执行状态

这篇文章主要介绍了python中windows怎么链接linux执行命令并获取执行状态的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python中windows怎么链接linux执行命令并获取执行状态文章都会有
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录