假设在我们的 项目中,每次需要启动多个py文件(这些文件是独立的),因为每次都执行多个py文件太繁琐,所有需要放在同一个py文件下来管理,每次只需要运行着一个py文件即可。
import multiprocessing
import subprocess
def run_script(script_name):
try:
subprocess.run(['python', script_name], check=True) # 如果python3,就写成python3
except subprocess.CalledProcessError:
print(f"Error running {script_name}")
if __name__ == "__main__":
scripts_to_run = ['test1.py', 'test2.py', 'test3.py']
processes = []
for script in scripts_to_run:
process = multiprocessing.Process(target=run_script, args=(script,))
processes.append(process)
process.start()
for process in processes:
process.join()
`subprocess` 是 Python 标准库中的一个模块,用于在 Python 脚本中创建和管理外部进程。它提供了一个强大的接口,可以与系统 shell 交互,运行外部命令,捕获它们的输出,传递参数等。`subprocess` 模块可以帮助你执行各种系统命令、运行其他程序,以及与外部进程进行通信。
下面是一些常见的`subprocess`模块的功能和方法:
1. **运行外部命令**:`subprocess.run()` 函数用于运行外部命令。你可以传递要运行的命令以及其他参数,例如环境变量、工作目录等。
```python
import subprocess
result = subprocess.run(["ls", "-l"], stdout=subprocess.PIPE, text=True)
print(result.stdout)
```
2. **捕获命令输出**:你可以使用`subprocess.run()`的`stdout`参数来捕获命令的标准输出。也可以使用`subprocess.PIPE`来将输出管道连接到 Python 进程。
3. **传递输入数据**:`subprocess` 允许你将数据传递给子进程的标准输入。例如,你可以使用`stdin`参数将数据传递给外部命令。
```python
import subprocess
result = subprocess.run(["grep", "search_term"], input="Some text to search", stdout=subprocess.PIPE, text=True)
print(result.stdout)
```
4. **等待命令完成**:`subprocess.run()` 会等待外部命令执行完成,然后返回结果。你可以使用`returncode`属性来检查命令的返回代码,以确定是否成功执行。
```python
import subprocess
result = subprocess.run(["ls", "-l"])
if result.returncode == 0:
print("Command executed successfully.")
```
5. **错误处理**:你可以使用`subprocess.CalledProcessError`异常来捕获外部命令执行过程中的错误,并处理它们。
```python
import subprocess
try:
subprocess.run(["nonexistent_command"])
except subprocess.CalledProcessError as e:
print(f"Command failed with error: {e}")
```
6. **其他方法**:除了`subprocess.run()`,`subprocess`模块还提供了其他方法,如`subprocess.Popen()`,它允许更高级的进程控制,包括在后台运行进程、与进程进行交互等。
总之,`subprocess`模块是 Python 中执行外部命令和处理进程的强大工具,可以帮助你在 Python 脚本中与操作系统和其他程序进行交互。
multiprocessing
模块创建了多个进程每个进程负责运行一个Python脚本。这样,这三个脚本可以同时运行。请确保脚本文件存在于相同的目录中,或者提供正确的路径。如果其中任何一个脚本在执行过程中发生错误,它将被捕获并显示错误信息。
这种方法允许你并行运行多个脚本,提高了运行效率,特别是当脚本之间相互独立时。