使用案例
运行n个shell脚本或python脚本
创建一个run.py文件,负责将参数(整数)传递给shell文件。
假设您想要运行n(4)个接受1个参数的shell脚本或python脚本。
创建一个名为run.python的文件,并使用以下代码:
下面的代码说明了:
- instanceQty = 要运行的shell脚本数量
- os.getcwd() = 当前文件的路径
- mockScript.sh = shell脚本,我将其放在与run.py相同的目录中
要运行shell脚本
import subprocess,os
instanceQty = 4
for i in range(0, instanceQty):
print(os.getcwd())
subprocess.Popen(f"{os.getcwd()}/mockScript.sh {i}",shell=True,executable='/bin/bash')
运行Python脚本
import subprocess,os,sys
instanceQty = 4
for i in range(0, instanceQty):
print(os.getcwd())
subprocess.Popen([sys.executable,f"{os.getcwd()}/mockScript.py",str(i)])
使用以下命令运行此文件
python run.py
在MacOS上出现权限问题
sudo chmod ug+x mockScript.sh
sudo chmod ug+x run.py
所有代码已在Python 3.8.1和MacOs 12.0.1环境下测试通过。
import
它并直接从父脚本调用它。确实存在一些情况下您真正需要一个子进程(例如,如果脚本使用信号,您需要在父进程中以不同方式处理它们),但更多时候您可能不应该这样做。 - tripleeesubprocess
文档中已经指出的那样,如果您的用例已经被更高级别的函数subprocess.run()
和相关函数处理,则应避免使用Popen
。基本上,除非您需要并行处理或与正在运行的进程进行交互,否则不要使用Popen
(如果确实需要使用,请注意等待子进程等操作,因为Popen
不会为您执行这些操作)。 - tripleee