subprocess.Popen 怎么使用
时间: 2024-10-24 08:01:49 浏览: 23
python中的subprocess.Popen()使用详解
`subprocess.Popen`是Python `subprocess`模块中的核心函数,用于启动一个新的子进程并执行指定的程序或命令。它创建的是一个进程对象,可以用来控制子进程的行为,比如等待其结束、获取输出等。以下是基本的使用步骤:
1. **创建进程**:
```python
import subprocess
process = subprocess.Popen(['command', 'to', 'execute'], # 这里是命令列表,如 ['ls', '-l']
shell=False, # 是否将整个命令视为单个字符串,默认False
stdout=subprocess.PIPE, # 获取标准输出
stderr=subprocess.PIPE) # 获取标准错误
```
2. **等待进程结束**:
可以通过`.wait()`方法等待进程结束,会阻塞当前线程直到子进程终止。也可以提供超时时间,例如 `.wait(timeout=5)`等待最多5秒。
```python
exit_code = process.wait() # 返回0表示成功,非零表示出错
```
3. **获取输出**:
使用`.communicate()`方法接收标准输出和标准错误,通常你会想获取其中的文本部分,所以需要decode:
```python
output, error = process.communicate()
if error:
print(f"错误信息: {error.decode()}")
else:
print(f"输出: {output.decode()}")
```
4. **其他选项**:
- `stdin`:设置子进程的输入流,可以用来传递数据给命令;
- `cwd`:设置工作目录,让命令在该目录下运行;
- `universal_newlines=True`:让`.communicate()`返回的结果直接是字符串而非字节串。
记得在处理完子进程后关闭它的句柄,以防资源泄漏:
```python
process.stdout.close()
process.stderr.close()
```
阅读全文