Python中的os系统与subprocess模块:执行命令与子进程控制

一、os系统模块

Python内置了os系统模块,可以用于执行与操作系统相关的命令,如文件操作、进程管理、环境变量等。其中,os.system()是最为基础和常用的函数,可以帮助我们执行Linux命令。

下面是os.system()的示例代码:

import os

os.system('echo "hello world"')

在Linux终端下执行上述代码,结果为:

hello world

可以看到,os.system()可以帮助我们在Python脚本中执行Linux命令,并且可以获得Linux命令的输出结果。但是,它的缺点也非常明显:它无法获得Linux命令的返回值,因此无法判断命令是否执行成功。

二、subprocess模块

subprocess模块是Python中关于子进程的模块,可以帮助我们更加灵活地调用系统命令,并且能够获取到命令执行的返回值。

下面是subprocess模块的示例代码:

import subprocess

cmd = 'echo "hello world"'
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
status = p.returncode

print("stdout: ", stdout)
print("stderr: ", stderr)
print("status: ", status)

运行上述代码,输出结果为:

stdout:  b'hello world\n'
stderr:  b''
status:  0

可以看到,我们使用subprocess.Popen()函数帮助我们执行了Linux命令,并获取到了Linux的输出结果、错误信息和返回值。其中,Popen()函数支持多种参数,比如:

  • shell参数:用于控制是否启用shell
  • stdin、stdout、stderr参数:用于控制输入输出的类型和流程
  • timeout参数:用于控制执行命令的超时时间

三、subprocess模块的高级应用

除了上述基础的使用方式,subprocess模块还支持许多高级特性,比如:

  • 支持管道操作
  • 支持工作目录切换
  • 支持环境变量的设置
  • 支持文件描述符的传递
  • 支持捕获子进程信号

下面是示例代码,用于展示subprocess模块的高级特性:

import os
import subprocess

# 管道操作
cmd1 = 'echo "hello" | sed s/hello/hi/g'
p1 = subprocess.Popen(cmd1, shell=True)
p1.wait()

# 工作目录切换
os.chdir('/tmp')
cmd2 = 'pwd'
p2 = subprocess.Popen(cmd2, shell=True, stdout=subprocess.PIPE)
stdout, _ = p2.communicate()
print("cwd: ", stdout.strip())

# 环境变量的设置
env = os.environ.copy()
env['PATH'] = env['PATH'] + ':/usr/local/bin'
cmd3 = 'echo $PATH'
p3 = subprocess.Popen(cmd3, shell=True, env=env, stdout=subprocess.PIPE)
stdout, _ = p3.communicate()
print("PATH: ", stdout.strip())

# 文件描述符传递
cmd4 = 'ls'
p4 = subprocess.Popen(cmd4, shell=True, stdout=subprocess.PIPE)
with open('/tmp/ls.txt', 'wb') as f:
    f.write(p4.stdout.read())

# 捕获子进程信号
def on_signal(signum, frame):
    print("Received signal ", signum)

cmd5 = 'sleep 10'
p5 = subprocess.Popen(cmd5, shell=True)
signal.signal(signal.SIGTERM, on_signal)
time.sleep(1)
p5.terminate()

总的来说,subprocess模块是Python中一个非常强大的系统模块,参考官方文档使用时请一定要注意各种参数的使用规则,以及与其他模块的配合使用。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/254075.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-14 17:40
下一篇 2024-12-14 17:40

相关推荐

  • 光模块异常,SFP未认证(entityphysicalindex=6743835)——解决方案和

    如果您遇到类似optical module exception, sfp is not certified. (entityphysicalindex=6743835)的问题,那么…

    编程 2025-04-29
  • 如何通过jstack工具列出假死的java进程

    假死的java进程是指在运行过程中出现了某些问题导致进程停止响应,此时无法通过正常的方式关闭或者重启该进程。在这种情况下,我们可以借助jstack工具来获取该进程的进程号和线程号,…

    编程 2025-04-29
  • Git config命令用法介绍:用正确的邮箱保障开发工作

    本文将详细介绍如何使用git config命令配置Git的全局和本地用户信息,特别是如何正确使用用户邮箱,保障Git操作的正常进行。 一、git config命令介绍 Git中的每…

    编程 2025-04-29
  • Python命令大全及说明

    Python是一种高级编程语言,由Guido van Rossum于1989年底发明。它具有良好的语法结构和面向对象的编程思想,具有简洁、易读、易学的特点,是初学者以及专业开发人员…

    编程 2025-04-29
  • Python模块下载与安装指南

    如果想要扩展Python的功能,可以使用Python模块来实现。但是,在使用之前,需要先下载并安装对应的模块。本文将从以下多个方面对Python模块下载与安装进行详细的阐述,包括使…

    编程 2025-04-29
  • Python SSH 远程执行命令

    Python SSH 远程执行命令是指在一个服务器上执行远程另一个服务器上命令。如果你需要在本地机器上执行命令,或者在远程机器上执行本地命令,你都可以使用 SSH。在 Python…

    编程 2025-04-29
  • Python编程三剑客——模块、包、库

    本文主要介绍Python编程三剑客:模块、包、库的概念、特点、用法,以及在实际编程中的实际应用,旨在帮助读者更好地理解和应用Python编程。 一、模块 1、概念:Python模块…

    编程 2025-04-29
  • Python如何下载第三方模块

    想要使Python更加强大且具备跨平台性,我们可以下载许多第三方模块。下面将从几个方面详细介绍如何下载第三方模块。 一、使用pip下载第三方模块 pip是Python的软件包管理器…

    编程 2025-04-28
  • 如何使用pip安装模块

    pip作为Python默认的包管理系统,是安装和管理Python包的一种方式,它可以轻松快捷地安装、卸载和管理Python的扩展库、模块等。下面从几个方面详细介绍pip的使用方法。…

    编程 2025-04-28
  • Python datetime和time模块用法介绍

    本文将详细阐述Python datetime和time模块的用法和应用场景,以帮助读者更好地理解和运用这两个模块。 一、datetime模块 datetime模块提供了处理日期和时…

    编程 2025-04-28

发表回复

登录后才能评论