当前位置: 首页 > ai >正文

Python subprocess简单理解

在 Python 中,`subprocess` 是一个**标准库模块**(无需额外安装),用于创建和管理子进程、执行外部命令或程序。它允许你与其他系统命令/脚本交互,并捕获它们的输出、错误或返回状态。

 

---

 

### **用途**

1. 执行外部命令(如 `ls`, `dir`, `ping` 等)

2. 调用其他程序或脚本(如调用另一个 Python 脚本)

3. 管道(pipe)输入/输出流

4. 获取命令执行结果(返回码、标准输出、错误输出)

 

---

 

### **无需安装**

`subprocess` 是 Python 内置模块,只需直接导入即可使用:

```python

import subprocess

```

 

---

 

### **基本用法**

#### 1. 执行简单命令(推荐 `subprocess.run`)

```python

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

print(result.stdout) # 输出命令结果

print(result.returncode) # 返回状态码(0 表示成功)

```

 

#### 2. 执行命令并获取输出(`check_output`)

```python

output = subprocess.check_output(["echo", "Hello World!"], text=True)

print(output) # Hello World!

```

 

#### 3. 高级控制(`Popen`)

```python

process = subprocess.Popen(["ping", "google.com"], stdout=subprocess.PIPE, text=True)

while True:

    output = process.stdout.readline()

    if output == '' and process.poll() is not None:

        break

    if output:

        print(output.strip())

```

 

---

 

### **关键参数说明**

- `args`: 命令参数(推荐使用列表形式,如 `["ls", "-l"]`)

- `capture_output=True`: 捕获标准输出和错误输出

- `text=True`: 以字符串形式返回输出(否则返回字节)

- `shell=True`: 通过系统 shell 执行命令(**慎用,存在安全风险**)

- `timeout=30`: 设置超时时间(秒)

 

---

 

### **注意事项**

1. **避免 `shell=True`**  

   除非必要(如需要执行管道操作 `|`),否则不要使用 `shell=True`,以防止命令注入攻击。

   ```python

   # 不安全的写法

   subprocess.run(f"ls -l {user_input}", shell=True) 

 

   # 安全的写法

   subprocess.run(["ls", "-l", user_input])

   ```

 

2. **处理路径空格**  

   如果参数包含空格,使用列表形式自动处理,无需手动加引号。

 

3. **跨平台兼容性**  

   不同系统的命令可能不同(如 `dir` 在 Windows,`ls` 在 Linux/Mac)。

 

---

 

### **常见问题**

- **如何获取错误信息?**  

  使用 `result.stderr` 或捕获 `subprocess.CalledProcessError` 异常。

- **如何输入内容到子进程?**  

  通过 `input` 参数(需配合 `stdin=subprocess.PIPE`)。

- **如何后台运行命令?**  

  使用 `Popen` 并忽略输出。

 

如果需进一步了解具体场景的用法,可以提供更多细节,我可以给出针对性示例。

http://www.xdnf.cn/news/7485.html

相关文章:

  • layui 介绍
  • 如何保存解析后的商品信息?
  • Python合法图片爬虫开发全指南
  • 优化dp贪心数论
  • 深入解析Node.js文件系统(fs模块):从基础到进阶实践
  • React TS中如何化简DOM事件的定义
  • 【Linux】初见,基础指令
  • SMT贴片元器件识别要点与工艺解析
  • 经典面试题:TCP 三次握手、四次挥手详解
  • 基于ssm+mysql的在线CRM管理系统(含LW+PPT+源码+系统演示视频+安装说明)
  • 【Bluedroid】蓝牙HID Device virtual_cable_unplug全流程源码解析
  • Pycharm-jupyternotebook不渲染
  • 运行在华为云kubernetes应用接入APM服务
  • spark任务的提交流程
  • 不同净化技术(静电 / UV / 湿式)的性能对比研究
  • 刷题记录(5)链表相关操作
  • 门店管理五大痛点解析:如何用数字化系统实现高效运营
  • HomeAssistant开源的智能家居docker快速部署实践笔记(CentOS7)
  • 在tp6模版中加减法
  • 大屏放大缩小自适应
  • 微软的 Windows Linux 子系统现已开源
  • 采集需要登录网站的教程
  • HTTP 协议的发展历程及技术演进
  • 使用亮数据代理IP+Python爬虫批量爬取招聘信息训练面试类AI智能体(附完整源码)
  • jmeter转义unicode变成中文
  • docker- Harbor 配置 HTTPS 协议的私有镜像仓库
  • Rofin PowerLine E Air维护和集成手侧激光Maintenance and Integration Manual
  • 能管理MySQL、Oracle、达梦数据库的桌面管理软件开源了
  • 使用 Java 开发 Android 应用:Kotlin 与 Java 的混合编程
  • 科技赋能·长效治理|无忧树建筑修缮渗漏水长效治理交流会圆满举行!