用一个py文件管理python项目中的多个文件运行

假设在我们的 项目中,每次需要启动多个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这个库:

`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脚本。这样,这三个脚本可以同时运行。请确保脚本文件存在于相同的目录中,或者提供正确的路径。如果其中任何一个脚本在执行过程中发生错误,它将被捕获并显示错误信息。

这种方法允许你并行运行多个脚本,提高了运行效率,特别是当脚本之间相互独立时。

你可能感兴趣的:(subprocess,multiprocessing)