首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

每日一模块:subprocess

一、简介

subprocess模块允许你从Python脚本中启动新的应用程序、连接到它们的输入/输出/错误管道,并获取它们的返回码。这个模块非常强大,因为它提供了与底层操作系统的交互能力,允许你执行系统命令并捕获其输出。

二、基本使用

1.执行命令并获取输出

使用subprocess.run()函数可以执行一个命令并获取其输出。

import subprocess

result = subprocess.run(['ls', '-l'], capture_output=True, text=True)

print(result.stdout)

capture_output=True表示我们要捕获命令的输出,text=True则指定输出应作为文本返回而不是字节。

2.执行命令并获取返回码

subprocess.run()的返回值是一个CompletedProcess实例,你可以通过它的returncode属性获取命令的返回码。

import subprocess

result = subprocess.run(['true'], capture_output=True, text=True)

print(result.returncode)  # 输出 0,表示命令成功执行

result = subprocess.run(['false'], capture_output=True, text=True)

print(result.returncode)  # 输出 1,表示命令执行失败

3.更复杂的命令执行

使用subprocess.Popen类可以执行更复杂的命令,它提供了更多的选项和控制。

import subprocess

# 使用Popen执行命令

process = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

stdout, stderr = process.communicate()

if process.returncode != 0:

print(f"Error: {stderr.decode()}")

else:

print(stdout.decode())

Popen构造函数中的stdout=subprocess.PIPE和stderr=subprocess.PIPE允许你捕获命令的标准输出和错误输出。communicate()方法用于等待进程完成并获取输出。

三、高级特性

1.设置环境变量

你可以通过env参数设置环境变量。

import subprocess

env = {'MY_VAR': 'my_value'}

result = subprocess.run(['ls'], env=env)

2.更改工作目录

使用cwd参数可以更改子进程的工作目录。

import subprocess

result = subprocess.run(['ls'], cwd='/tmp')

3.超时

你可以设置命令执行的最大时间,如果超过这个时间,命令将被终止。

import subprocess

result = subprocess.run(['sleep', '5'], timeout=3)

上面的命令将尝试执行sleep 5,但由于设置了超时为3秒,所以命令将在3秒后被终止。

四、注意事项

• 总是确保你执行的命令是安全的,特别是当命令的输入来自不可信的源时。永远不要直接执行来自用户输入的命令,因为这可能导致安全漏洞,如命令注入攻击。

• 使用capture_output=True时,请确保处理大量的输出,因为这可能会导致内存使用增加。

• 尽可能使用subprocess.run(),因为它比subprocess.Popen()更简洁且易于使用。

五、总结

subprocess模块是Python中执行外部命令和脚本的强大工具。通过使用subprocess.run()或subprocess.Popen(),你可以从Python脚本中启动和管理外部进程,并捕获其输出。在处理系统命令时,请始终注意安全性,并确保你的代码是健壮的。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OsbGSKwu7cYeIX-XaznVQBpg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券