首页 > 系统相关 >python subprocess 执行Linux指令

python subprocess 执行Linux指令

时间:2024-08-19 10:15:13浏览次数:11  
标签:None stdout python subprocess stderr Linux 进程 True

一、subprocess模块

1、概述
subprocess 模块首先推荐使用的是它的 run 方法subprocess.run(),更高级的用法可以直接使用 Popen 接口subprocess.Popen()

2、优点

  • 安全性:与os.system相比,subprocess避免了shell注入攻击的风险。
  • 灵活性:subprocess可以与子进程的stdin、stdout和stderr流进行交互。
  • 功能丰富:它支持复杂的系统调用,如管道和重定向。

3、subprocess.run()

  • 语法格式:

subprocess.run(args, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None)
  • 参数说明:


args:这是命令和参数的列表,其中命令是列表的第一个元素。如果 shell 参数设置为 True,args必须是一个字符串

stdin:可以是 None、一个已打开的文件描述符、一个现有的文件对象,或者 subprocess.PIPE。用于指定子进程的标准输入。

input:如果 stdin 参数是 PIPE,这个参数可以被用来传递一个字符串到子进程的标准输入。

stdout 和 stderr:这些参数与 stdin 类似,但它们控制的是标准输出和标准错误输出。它们也可以被设置为 None、一个文件描述符、一个现有的文件对象,或者 subprocess.PIPE。

capture_output:如果设置为 True,stdout 和 stderr 将会被捕获。这相当于设置 stdout=subprocess.PIPE 和 stderr=subprocess.PIPE。

shell:如果为 True,指定的命令将通过 shell 执行。

cwd:如果指定,子进程的当前工作目录将被改变到 cwd。

timeout:如果指定,且执行时间超过了这个值(以秒计),将会抛出 subprocess.TimeoutExpired 异常。

check:如果设置为 True,并且进程以非零状态码退出,将会抛出 subprocess.CalledProcessError 异常。

encoding 和 errors:指定如何解码从子进程输出的字节。只有当 stdout 或 stderr 被捕获时才有效。

text:一个简写的标志,用于设置 encoding='utf-8' 和 universal_newlines=True,它会将 stdout 和 stderr 的输出作为字符串处理。

env:指定子进程的环境变量。如果为 None,使用父进程的环境变量。

universal_newlines:如果为 True,stdin、stdout 和 stderr 将会作为文本流处理,类似于 text=True。

**other_popen_kwargs:你可以提供其他的关键字参数,这些参数将直接传递给 Popen 构造函数。
  • 例如:
import subprocess

# 执行命令并捕获输出
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)

print(f"命令输出:\n{result.stdout}")
if result.stderr:
    print(f"命令错误输出:\n{result.stderr}")

4、subprocess.Popen()

  • 参数说明:
args: 和 run 函数相同。
bufsize:缓冲区大小,-1 表示使用系统默认缓冲区大小,0 表示不使用缓冲区,1 表示行缓冲。
executable:如果指定,将使用这个可执行文件来替换要执行的程序。
stdin, stdout, stderr, shell, cwd:与 run 函数相同。
preexec_fn:仅在 Unix 系统上有效)是一个可调用对象,它将在子进程运行之前被调用。
close_fds:如果为 True(默认值),在子进程中除了 0、1 和 2 之外所有的文件描述符都将被关闭。
env:用于指定环境变量。
shell:如果这个参数为 True,指定的命令将通过 shell 执行。

cwd:如果指定,子进程的工作目录将改变到 cwd。

env:用于指定子进程的环境变量。如果为 None,子进程会继承父进程的环境变量。

universal_newlines:(现在推荐使用 text 参数)如果为 True,stdin、stdout 和 stderr 将作为文本流(字符串)而不是字节流。

startupinfo 和 creationflags:这两个参数仅在 Windows 系统上有效,用于控制子进程的创建方式。

restore_signals:(仅在 Unix 系统上有效)如果为 True,在执行新程序前,将会恢复 Python 的信号处理为默认值。

start_new_session:(仅在 Unix 系统上有效)如果为 True,子进程将会在新的会话中启动。

pass_fds:(仅在 Unix 系统上有效)要传递给子进程的文件描述符。

encoding 和 errors:这些参数用于设置在解码和编码文本数据时使用的编码和错误处理方式。

text:一个用于设置编码为 "utf-8" 且 universal_newlines=True 的简化参数,这将会让 stdout 和 stderr 的输出作为字符串处理。
  • 例如:
import subprocess
 
process = subprocess.Popen(['ping', '-c', '4', 'example.com'], stdout=subprocess.PIPE, text=True)
stdout, stderr = process.communicate()
if not stderr:
    print(stdout)
else:
    raise stderr

标签:None,stdout,python,subprocess,stderr,Linux,进程,True
From: https://www.cnblogs.com/lanjianhua/p/18366823

相关文章

  • (免费源码)计算机毕业设计必看必学 php 酒店预约管理系统-92767-原创定制程序 java、PHP
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,酒店预约管理系统当然也不能排除在外。酒店预约管理系统是以实际运用为开发背景,运用软件工程开发方法,采用Thinkphp技术构建的一个管理系统。整个开发过程首......
  • 计算机毕业设计必看必学! ! 94755 spring boot高校毕业生就业信息管理系统,原创定制程
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对高校毕业生就业信息管理系统等问题,对高校毕业生就业信息管理系统进行研究分析,然后开发设计......
  • Python文件与目录管理的15个技巧
    文末赠免费精品编程资料~~今天我们将一起探索如何像专家一样管理你的文件和目录。无论是整理杂乱无章的文档,还是自动化备份过程,Python都提供了强大的工具。让我们从基础开始,逐步深入。技巧1:查看当前目录importosprint(os.getcwd())#输出当前工作目录解释:使......
  • 进程监控神器Supervisor:让你的Python应用稳如老狗!
    文章来源:https://juejin.cn/post/73544069807843737981.概述Supervisor 是一个C/S架构的进程监控与管理工具,本文主要介绍其基本用法和部分高级特性,用于解决部署持久化进程的稳定性问题。2.问题场景在实际的工作中,往往会有部署持久化进程的需求,比如接口服务进程,又或者是......
  • JetBrains DataSpell 2024.2 (macOS, Linux, Windows) - 专业数据科学家的 IDE
    JetBrainsDataSpell2024.2(macOS,Linux,Windows)-专业数据科学家的IDEJetBrains跨平台开发者工具请访问原文链接:https://sysin.org/blog/jetbrains-dataspell/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgJetBrainsDataSpell-专业数据科学家的IDE......
  • Linux运维学习记录02
    一、总结学过的权限,属性及ACL相关命令及选项,示例。文件的权限主要针对三类对象进行定义:owner属主,ugroup属组,gother其他,o每个文件针对每类访问者都定义了三种权限rReadable4wWritable2xeXcutable1Linux文件系统上的特殊权限SUID作用于二进制可执行文件......
  • Linux运维学习记录03
    磁盘存储术语总结:head,track,sector,sylinder.head:磁盘驱动器中的读/写头,用于读取或写入数据。每个磁盘表面有一个头。track:磁盘表面上的一个圆形数据存储区域,由多个扇区组成。sector:把每个磁道按512bytes大小再进行划分,这就是扇区,每个磁道上的扇区数量是不一样的sylin......
  • 【Linux系列】应急响应 · 备忘录
    这些命令和文件可以帮助你快速定位问题、查找可疑文件、监控进程等。请注意,这些命令可能需要root权限才能执行。查找72小时内新增的文件:find/-ctime-2查找24小时内被修改的JSP文件:find./-mtime0-name"*.jsp"根据确定时间去反推变更的文件:ls-al/tmp|gre......
  • Python向IP地址发送字符串
    在Python中,向IP地址发送字符串通常意味着你需要通过某种协议来实现通信。最常见的协议包括TCP和UDP。这里,我将分别给出使用TCP和UDP协议向指定IP地址发送字符串的示例代码。1.TCP、UDP协议——示例一1.1使用TCP协议TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协......
  • Python爬虫:网页脚注与引用的智能捕手
    标题:Python爬虫:网页脚注与引用的智能捕手在数字化信息的海洋中,网页脚注和引用是丰富内容、提供来源的重要方式。然而,对于Python爬虫而言,如何精准捕捉这些细微信息,成为了一项挑战。本文将深入探讨Python爬虫在处理网页中的脚注和引用时的策略与技巧,通过实例代码展示其高效性......