百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

探索 Python 中的 subprocess 模块:执行外部命令和程序

itomcoil 2024-12-23 11:07 15 浏览

前言

在 Python 中,subprocess 模块允许你在子进程中执行外部命令和程序,并且与之交互。本文将向你介绍 subprocess 模块的基本用法,以及如何利用它执行外部命令和控制子进程。


一.导入 subprocess 模块

subprocess 模块,python内置的不需要额外安装使用需要导入即可:

import subprocess


二.基本用法

1.run()函数执行外部命令

这个例子展示了如何使用 subprocess.run() 方法执行外部命令。在这里,我们执行了 dir 命令来列出当前目录下的文件和文件夹。windows格式是GB2312,需要转成这个,不然打印会乱码,如下图

import subprocess


result = subprocess.run('dir',shell=True,stdout=subprocess.PIPE)


print(result.stdout.decode('GB2312'))



2.Popen()函数控制子进程

subprocess.Popen() 方法创建了一个新的子进程,并允许你与之交互。在这个例子中,我们调用了系统命令执行打印命令,并捕获了其输出。

import subprocess  
  
# 执行外部命令并交互  
process = subprocess.Popen(['python', '-c', 'print("Hello, World!")'], stdout=subprocess.PIPE)  
output, error = process.communicate()  
print(output.decode('utf-8'))

3.设置超时

只有run()函数有设置timeout,Popen()没有

subprocess.run(['dir'], timeout=2)

?

4.常用方法和函数

run(cmds,shell=True,text=True,stdout=subprocess.PIPE, stderr=subprocess.PIPE): 执行指定的命令,stdout和stderr参数来捕获子进程的输出。

Popen(args, stdout=subprocess.PIPE): 创建一个新的子进程对象。

communicate(input): 与子进程进行交互,发送数据并获取输出。

5.应用场景

subprocess 模块在执行系统命令、调用其他程序、进行进程间通信等场景中非常有用。它可以帮助你与外部程序进行交互,获取和处理执行结果。以下是一些常用的场景

  1. 自动化任务:使用subprocess模块可以轻松地自动化常见的系统任务,例如文件管理、系统监控、网络管理等等。
  2. 运行脚本或程序:当需要从Python脚本中调用其他脚本或程序时,可以使用subprocess模块来启动和监控这些进程。
  3. 与外部服务通信:如果需要与外部服务(例如数据库、Web服务或文件服务器)进行通信,可以使用subprocess模块来执行相关的命令或脚本。
  4. 集成工具:subprocess模块可以用于集成各种工具和命令行程序,以便在Python脚本中方便地使用它们。
  5. 测试和调试:在测试和调试阶段,可以使用subprocess模块来模拟外部环境,以便更好地理解和控制程序的执行。
  6. 系统管理:在系统管理任务中,可以使用subprocess模块来执行系统命令和脚本,例如安装软件、配置网络或管理用户账户等等。
  7. 构建工具:subprocess模块可以用于构建工具中,例如构建系统、持续集成/持续部署(CI/CD)工具等等,以自动化构建和部署过程。
  8. 数据处理:在数据处理任务中,可以使用subprocess模块来调用外部数据处理工具或命令,例如数据清洗、转换或分析等等。


6. 注意事项

  1. Shell安全性:使用subprocess.run()或subprocess.Popen()时,如果通过shell参数(shell=True)来执行命令,需要特别注意安全性问题。这可能会导致命令注入攻击,因为用户输入可能会被解释为shell命令。因此,除非你完全信任执行的命令,否则应避免使用shell参数。
  2. 管道管理:在使用subprocess模块时,管道是非常有用的功能,可以用于获取子进程的输出。然而,如果不正确地处理管道,可能会导致死锁或资源泄漏。确保在不再需要管道时关闭它们,并使用communicate()方法来读取管道内容,以避免死锁。
  3. 资源管理:确保在不再需要子进程时正确地关闭它们。可以使用wait()方法来等待子进程结束,或使用Popen.kill()或Popen.terminate()来强制终止子进程。同时,也要注意关闭文件描述符和网络连接等资源。
  4. 错误处理:当执行外部命令时,可能会发生错误。确保使用适当的错误处理机制来捕获和处理这些错误,例如使用try/except块来捕获异常。
  5. 环境变量和路径:在执行外部命令时,可能会受到环境变量和路径的影响。确保了解你的环境变量和路径设置,并考虑使用绝对路径来执行命令或脚本。
  6. 超时和终止:在某些情况下,你可能需要设置超时或终止正在执行的子进程。可以使用subprocess.Popen的timeout参数来设置超时,并使用Popen.kill()或Popen.terminate()来强制终止子进程。
  7. 输出和返回值:在使用subprocess模块时,需要注意正确地处理子进程的输出和返回值。使用communicate()方法可以获取子进程的标准输出和标准错误输出,并使用returncode属性获取子进程的返回值。


更多用法参考官方文档

https://docs.python.org/3/library/subprocess.html

相关推荐

PS小技巧 调整命令,让人物肤色变得更加白皙 #后期修图

我们来看一下如何去将人物的皮肤变得更加的白皙。·首先选中图层,Ctrl键加J键复制一层。·打开这里的属性面板,选择快速操作删除背景,这样就会将人物进行单独的抠取。·接下来在上方去添加一个黑白调整图层,...

把人物肤色提亮的方法和技巧

PS后期调白肤色提亮照片的方法。一白遮百丑,所以对于Photoshop后期来说把人物肤色调白是一项非常重要的任务。就拿这张素材图片来说,这张素材图片人脸的肤色主要偏红、偏黄,也不够白皙,该怎样对它进行...

《Photoshop教程》把美女图片调成清爽色彩及润肤技巧

关注PS精品教程,每天不断更新~~室内人物图片一般会偏暗,人物脸部、肤色及背景会出现一些杂点。处理之前需要认真的给人物磨皮及美白,然后再整体润色。最终效果原图一、用修补工具及图章工具简单去除大一点的黑...

PS后期对皮肤进行美白的技巧

PS后期进行皮肤美白的技巧。PS后期对皮肤进行美白的技巧:·打开素材图片之后直接复制原图。·接下来直接点击上方的图像,选择应用图像命令。·在通道这里直接选择红通道,混合这里直接选择柔光,然后点击确定。...

493 [PS调色]调模特通透肤色

效果对比:效果图吧:1、光位图:2、拍摄参数:·快门:160;光圈:8;ISO:1003、步骤分解图:用曲线调整图层调出基本色调。用可选颜色调整图层调整红色、黄色、白色和灰色4种颜色的混合比例。用色彩...

先选肤色再涂面部,卡戴珊的摄影师透露:为明星拍完照后怎么修图

据英国媒体12月17日报道,真人秀明星金·卡戴珊终于承认,她把女儿小北P进了家族的圣诞贺卡,怪不得粉丝们都表示这张贺卡照得非常失败。上周,这位39岁的女星遭到了一些粉丝针对这张照片的批评,她于当地时间...

如何在PS中运用曲线复制另一张照片的色调

怎样把另一张作品的外观感觉,套用到自己的照片上?单靠肉眼来猜,可能很不容易,而来自BenSecret的教学,关键是在PS使用了两个工具,让你可以准确比较两张照片的曝光、色调与饱和度,方便你调整及复制...

PS在LAB模式下调出水嫩肤色的美女

本PS教程主要使用Photoshop使用LAB模式调出水嫩肤色的美女,教程调色比较独特。作者比较注重图片高光部分的颜色,增加质感及肤色调红润等都是在高光区域完成。尤其在Lab模式下,用高光选区调色后图...

在Photoshop图像后期处理中如何将人物皮肤处理得白皙通透

我们在人像后期处理中,需要将人物皮肤处理的白皙通透,处理方法很多,大多数都喜欢使用曲线、磨皮等进行调整,可以达到亮但是不透,最终效果往往不是很好,今天就教大家一种如何将任务皮肤处理得白皙通透,希望能帮...

PS调色自学教程:宝宝照片快速调通透,简单实用!

PS调色自学教程:宝宝照片快速调通透。·首先复制图层,然后选择进入ACR滤镜,选择曲线锁定照片的亮部,也就高光位置,其他部位补亮一点,尤其是阴影的部位补亮多一些,让画面的层次均匀一点。·然后回到基本项...

【干货】如何利用PS进行人物美化

人物图像美化在Photoshop中非常常用,Photoshop作为一款功能强大的图像处理软件,不仅可以对人像进行基本的调色、美化和修复等处理,还可以改变人物的线条和幅度,如调整脸部器官和脸型的大小、调...

教大家一种可以快速把肤色处理均匀的方法@抖音短视频

快速把肤色处理均匀的方法。今天教大家一种可以快速把肤色处理均匀的方法。像这张照片整体肤色走紫红色,但是局部偏黄缘处理起来非常的麻烦。其实我们只需要新建空白图层,图层混合模式更改为颜色,再选择画笔工具把...

PS调色教程 利用RAW调出干净通透的肤色

要么不发,要么干货。后期教程来噜~用RAW调出干净通透的肤色。这次终于不会原片比PS后好看了吧。如果你依然这么觉得,请不要残忍的告诉我这个事实,泪谢TAT)附送拍摄花絮,感谢各位的支持更多风格请关注m...

photoshop后期皮肤变白的技巧

PS后期皮肤变白的技巧。1.PS后期让皮肤变白的方法有很多种,接下来教你一种非常简单容易上手的方法。2.打开素材图片之后,直接在小太极下拉框的位置添加一个纯色调整图层,颜色设置一个纯白色,点击...

Photoshop调出人物的淡雅粉嫩肤色教程

本教程主要使用Photoshop调出人物的淡雅粉嫩肤色教程,最终的效果非常的通透迷人,下面让我们一起来学习.出自:86ps效果图:原图:1、打开原图复制一层。2、用Topaz滤镜磨皮(点此下载)。3、...