热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python执行linux外部程序_Python2/3中执行外部命令(Linux)和程序(exe)子进程模块subprocess...

subprocess模块可以使Python执行外部命令(Linux)和程序(exe),并得到相应的输出结果,进一步处理。在Python3.5中ÿ

subprocess 模块可以使 Python 执行外部命令(Linux)和程序(exe),并得到相应的输出结果,进一步处理。在 Python3.5 中,subprocess 模块取代了 os.system、os.spawn* 。该模块很好地体现了 Python 胶水语言的特性,丰富了 Python 的拓展能力,故本文接下来主要介绍 subprocess 模块的用法,并简单说明在 Python2/3 中的使用区别。

速查表

Python2

Python3.5

subprocess.call(...)

subprocess.run(...)

subprocess.check_call(...)

subprocess.run(..., check=True)

subprocess.check_output(...)

subprocess.run(..., check=True, stdout=PIPE).stdout

subprocess.Popen(...)

subprocess.Popen(...)

通过上表可以看到,在 Python2 中 subprocess 模块共有三个函数 call、check_call、check_output 和一个类 Popen ,本质上这三个函数都是基于类 Popen 的封装,可以更简单地执行程序和获得输出。而在 Python3.5 中,三个函数可以通过 run 函数和参数设置来使用,同时这三个函数也可以在 Python3.5 中使用。

执行外部命令和程序

1 import subprocess

2 subprocess.call(["ls", "-l"])

3 subprocess.call("ls -l", shell=True)

4 subprocess.call("ffmpeg.exe -i test3.mp4 test.avi", shell=True)

前两个 call() 执行了查看当前目录的命令,第三个 call() 调用了 ffmpeg.exe 程序,对 test3.mp4 进行转码,生成 test.avi 。call() 函数默认接收拆分命令的列表,执行成功后,返回值 returncode 为0,失败返回1。当参数 shell=True 时,接收字符串,运行 shell,通过 shell 解释字符串,执行外部命令和程序。

添加错误处理的执行

1 subprocess.check_call("exit 1", shell=True)

check_call() 函数与 call() 函数用法相似。但当返回值不为0时,会抛出 subprocess.CalledProcessError 异常。

获取输出的执行

1 subprocess.check_output("ls -t | head -n 4", shell=True)

check_output() 函数与 check_call() 函数用法相似。但会返回执行的输出结果,以 bytes 序列接收,在 Python3 中可进行相应的解码 decode() 成字符串 str 序列,再进一步处理。该样例返回当前目录下按时间排序的前四个文件的详细信息。

需求化的执行

1 child1 = subprocess.Popen("ls -t", shell=True, stdout=subprocess.PIPE)

2 child2 = subprocess.Popen("head -n 4", shell=True, stdin=child1.stdout, stdout=subprocess.PIPE)

3 outs, errs = child2.communicate()

Popen() 类创建并执行子进程。通过参数 stdin, stdout, stderr 改变标准输入、标准输出、标准错误,使用 subprocess.PIPE 初始化参数,创建缓存区,传递文本流,实现 Shell 管道功能。通过 communicate() 方法阻塞父进程,获取子进程执行结果,以 bytes 序列返回输出和错误的元组。

还可通过下列方法,操作子进程,获取相关信息:

Popen.wait():阻塞父进程,等待子进程终止。返回属性 returncode 。

Popen.poll():检查子进程状态。返回属性 returncode 。

Popen.kill():杀死子进程。

Popen.pid:获取子进程的进程ID。

Popen.returncode:获取子进程的返回码。

官方文档



推荐阅读
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Python中sys模块的功能及用法详解
    本文详细介绍了Python中sys模块的功能及用法,包括对解释器参数和功能的访问、命令行参数列表、字节顺序指示符、编译模块名称等。同时还介绍了sys模块中的新功能和call_tracing函数的用法。推荐学习《Python教程》以深入了解。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • 说明:主要是基于ghostyu网友整理的《 armmini2440基于v4l2ffmpegx264的视频远程监控》。自己做了一遍,遇到不少问题,就整理记录下来。 1、平台硬件:ar ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 一文了解Python collections模块中的deque用法[python头条资讯]
    Python中文网有大量免费的Python入门教程,欢迎大家来学习。collections是Python内建的一个集合模块,deque是双边队列,具有队列和栈的性质,在list的基 ... [详细]
  • 我正在尝试解析具有已知格式的文本文件,但是每一行都不是100%一致。 ... [详细]
author-avatar
云沏-茶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有