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

这篇具有很好参考价值的文章主要介绍了【Python】在代码中执行终端命令并获取输出和运行状态。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0 前言

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

1 os库

1.1 os.system

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

# test.py
print("Hello")

# run.py
import os
cmd = "python test.py"
os.system(cmd)

# output:
Hello

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

1.2 os.popen

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

# test.py
print("Hello")

# run.py
import os
cmd = "python test.py"
out = os.popen(cmd)
print(out.readlines())

# output:
['Hello\n']

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

2 subprocess库

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

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

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

2.1 subprocess.run

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

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

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

  下面是一个简单的实例

# test.py
print("Hello")

# run.py
import subprocess
cmd = "python test.py"
b = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE).stdout
print(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函数来查看指令执行状态,判断是否执行完毕。文章来源地址https://www.toymoban.com/news/detail-448516.html

3 参考链接

  • 在python中运行命令行命令的四种方案
  • python 执行命令,并获取结果及执行状态(os.popen、subprocess.Popen、os.system)

到了这里,关于【Python】在代码中执行终端命令并获取输出和运行状态的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PyCharm 调试过程中控制台 (Console) 窗口内运行命令 - 实时获取中间状态

    ​​​ [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

    2024年02月20日
    浏览(50)
  • 涨见识了,在终端执行 Python 代码的 6 种方式!

    我意识到其他人可能不知道有五花八门的方法可以将 Python 指向要执行的代码,因此有了这篇文章。 因为如何用管道传东西给一个进程是属于 shell 的内容,我不打算深入解释。毋庸置疑,你可以将代码传递到 Python 中。 如果将文件重定向到 Python,这显然也可以。 归功于 Py

    2024年02月04日
    浏览(20)
  • 【python】flask各种版本的项目,终端命令运行方式的实现

    ✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN新星创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开

    2024年03月27日
    浏览(31)
  • 创建 Python 脚本以在 Linux 中打开新终端并运行命令

    Linux 操作系统以其程序员广泛使用的多功能终端而闻名。 但在某些情况下,我们会发现自己重复编写同一组语法,这可能既无聊又耗时。 你有没有想过是否有一种方法可以在文件中预先编写 Linux 命令,然后在终端中立即执行? 是的! 你可以。 您可以在文件中编写预先编写

    2024年02月04日
    浏览(36)
  • NDK编译系列:手机终端运行可执行文件的方法

    该方式为PC上的NDK工具生成的可执行文件和库,利用adb导入到手机(未采用Andriod Studio生成带界面的apk文件),直接通过windows的命令窗在安卓原生linux环境上运行仿真。 利用前文博客总结梳理的方法,假设已经生成了可在手机终端运行的二进制文件和相关动态库,我们该如何

    2024年02月16日
    浏览(36)
  • Java运行时jar时终端输出的中文日志是乱码

    运行Jar时在控制台输出的中文日志全是乱码,这是因为cmd/bash默认的编码是GBK,只要把cmd的编码改成UTF-8即可  两种方式修改:临时修改和注册表永久修改 只对当前的cmd页面有效,关闭后重新打开都会恢复成GBK, 打开cmd,输入以下命令 这样既可以更改cmd的编码为UTF-8了。 以下

    2024年02月10日
    浏览(22)
  • vscode运行c++结果输出在windows终端的两种方法

    打开.vscode中launch.json文件 修改下面三个配置 \\\"program\\\":\\\"C:\\\\Windows\\\\System32\\\\cmd.exe\\\", \\\"args\\\": [\\\"/C\\\",\\\"${fileDirname}\\\\${fileBasenameNoExtension}.exe\\\",\\\"\\\",\\\"pause\\\"], \\\"externalConsole\\\": true, 以非调试模式运行,ctrl+F5 打开.vscode中launch.json文件 修改\\\"externalConsole\\\": true, 在main函数中最后加入getchar()函数 注:方法2如

    2024年02月19日
    浏览(26)
  • Python安装完成后执行pip命令报错:‘pip‘ 不是内部或外部命令,也不是可运行的程序

    解决办法: 已安装pip的情况下,把这个Scripts文件夹的目录添加到Path环境变量即可。   我的电脑 - 右键 属性 - 高级系统设置 - 环境变量 - path - 编辑:加入Scripts文件夹的目录    确定即可

    2024年02月12日
    浏览(40)
  • VScode编译多文件执行与配置终端命令行

    vscode 的配置分两类,一是全局的用户配置,二是当前工作区配置。vscode 打开的文件夹的根目录是一个工作区,.vscode目录就是存放当前工作区相关配置文件的目录。 这样分享项目时,也把该项目的 vscode 配置分享出去了,保证了协同工作开发环境的统一性。 .vscode目录下配置

    2024年02月06日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包