# Python `subprocess`

> 原文： [https://pythonspot.com/python-subprocess/](https://pythonspot.com/python-subprocess/)

`subprocess`模块使您可以从 Python 程序启动新应用程序。 多么酷啊？

## 在 Python 中启动一个进程：

您可以使用`Popen`函数调用在 Python 中启动进程。 下面的程序启动 Unix 程序`cat`，第二个参数是参数。 这相当于`cat test.py`。您可以使用任何参数启动任何程序。

```py
#!/usr/bin/env python

from subprocess import Popen, PIPE

process = Popen(['cat', 'test.py'], stdout=PIPE, stderr=PIPE)
stdout, stderr = process.communicate()
print stdout

```

`process.communicate()`调用从进程中读取输入和输出。`stdout`是进程输出。仅当发生错误时，`stderr`才会被写入。 如果要等待程序完成，可以调用`Popen.wait()`。

## `subprocess.call()`：

`subprocess`具有方法`call()`，可用于启动程序。该参数是一个列表，其第一个参数必须是程序名称。完整的定义是：

```py
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
# Run the command described by args.
# Wait for command to complete, then return the returncode attribute.

```

在下面的示例中，完整的命令将为`ls -l`

```py
#!/usr/bin/env python

import subprocess
subprocess.call(["ls", "-l"])

```

## 保存进程输出（标准输出）

我们可以获取程序的输出，并使用`check_output`直接将其存储在字符串中。该方法定义为：

```py
 subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)
# Run command with arguments and return its output as a byte string.

```

用法示例：

```py
#!/usr/bin/env python
import subprocess

s = subprocess.check_output(["echo", "Hello World!"])
print("s = " + s)

```