subprocess.Popen 的stdin 怎么使用
时间: 2024-10-25 12:04:29 浏览: 19
python中的subprocess.Popen()使用详解
`subprocess.Popen` 是 Python 中用于创建新的进程并执行外部命令的模块。它的 `stdin` 参数表示标准输入,通常可以设置为不同的值来控制进程的输入流:
1. **None** 或者默认值:如果不指定,子进程将有自己的独立标准输入。例如,你可以通过进程对象 `.stdin.write()` 来向其发送数据。
```python
import subprocess
p = subprocess.Popen(["cat"], stdin=subprocess.PIPE)
p.stdin.write(b"Hello from parent process\n")
```
2. **subprocess.PIPE**:如果设置为管道 (`PIPE`),则可以连接到父进程的另一个文件描述符,如 `.stdin`、`.stdout` 或 `.stderr`,形成一个双向通道。这允许你在启动进程的同时立即开始交互。
```python
p = subprocess.Popen(["nc", "localhost", "8000"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
parent_conn, child_conn = p.stdin, p.stdout
parent_conn.write(b"Sending data to remote server...\n")
```
3. **open 文件对象**:如果你有一个打开的文件作为输入,可以将其传递给 `stdin`。
```python
with open("input.txt", "rb") as f:
p = subprocess.Popen(["some_command"], stdin=f)
```
阅读全文