如何从一个脚本 运行 多个 Python/Shell 脚本
How to run multiple Python/Shell scripts from one script
我有 4 个 python 和 shell 脚本,我想从一个 python 脚本中一个接一个地 运行。
所以让我们说:
import script1
import script2
import script3
python script1.py &
#do something here to check if script1 has been completed and move to script 2
python script2.py &
#do something here to check if script2 has been completed and move to script 3
python script3.py &
#do something here to check if script3 has been completed and move to script 4 which is a shell script.
有人可以帮忙吗?提前致谢!
我会这样做:
#!/usr/bin/env python
import subprocess
subprocess.run(['python', 'script1.py'])
subprocess.run(['python', 'script2.py'])
subprocess.run(['python', 'script3.py'])
如果您只希望每个脚本 运行 如果前一个脚本成功:
#!/usr/bin/env python
import subprocess
subprocess.run('python script1.py && python script2.py && python script3.py', shell=True)
我在这里使用 shell=True
因为我依赖 shell 来解释 &&
并且只让下一个过程 运行 如果前一个过程成功.
如果您希望它们全部 运行 彼此并行,并且在后台:
#!/usr/bin/env python
import subprocess
subprocess.run('python script1.py &', shell=True)
subprocess.run('python script2.py &', shell=True)
subprocess.run('python script3.py &', shell=True)
我在这里使用 shell=True
因为我依赖 shell 来解释 &
意味着我希望进程 运行 运行 在后台,这样我就可以在他们 运行.
的时候继续做其他事情
一般来说,我不会为此使用 Python,我会写一个 bash
脚本,如下所示:
#!/bin/bash
python script1.py
python script2.py
python script3.py
此外,一般来说,我会将 Python 脚本的第一行作为 shebang,如下所示:
#!/usr/bin/env python
print('I am a Python script with shebang')
然后我将使脚本可执行:
chmod +x script.py
现在,而不是 运行将它与:
python script.py
内核知道要使用哪个解释器,所以我不必每次都告诉它,我可以简单地运行它:
script.py
如果它所在的目录在我的 PATH 上。或者,如果它不在我的路径上,我需要:
/path/to/script.py
用例
如果您以后想添加更多脚本,建议您创建一个 run.py 文件,负责将参数(整数)传递给 shell 文件。
假设您喜欢 运行 n(4) 数量的 shell 脚本或 python 接受 1 参数的脚本。
使用以下代码创建文件 run.python。
下面的代码说明
- instanceQty = shell 脚本到 运行
的数量
- os.getcwd() = 当前文件的路径
- mockScript.sh = shell 脚本 与 run.py[ 放在同一个目录下=46=]
到运行shell脚本
# this is python file with name run.py
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 环境下测试。
我有 4 个 python 和 shell 脚本,我想从一个 python 脚本中一个接一个地 运行。
所以让我们说:
import script1
import script2
import script3
python script1.py &
#do something here to check if script1 has been completed and move to script 2
python script2.py &
#do something here to check if script2 has been completed and move to script 3
python script3.py &
#do something here to check if script3 has been completed and move to script 4 which is a shell script.
有人可以帮忙吗?提前致谢!
我会这样做:
#!/usr/bin/env python
import subprocess
subprocess.run(['python', 'script1.py'])
subprocess.run(['python', 'script2.py'])
subprocess.run(['python', 'script3.py'])
如果您只希望每个脚本 运行 如果前一个脚本成功:
#!/usr/bin/env python
import subprocess
subprocess.run('python script1.py && python script2.py && python script3.py', shell=True)
我在这里使用 shell=True
因为我依赖 shell 来解释 &&
并且只让下一个过程 运行 如果前一个过程成功.
如果您希望它们全部 运行 彼此并行,并且在后台:
#!/usr/bin/env python
import subprocess
subprocess.run('python script1.py &', shell=True)
subprocess.run('python script2.py &', shell=True)
subprocess.run('python script3.py &', shell=True)
我在这里使用 shell=True
因为我依赖 shell 来解释 &
意味着我希望进程 运行 运行 在后台,这样我就可以在他们 运行.
一般来说,我不会为此使用 Python,我会写一个 bash
脚本,如下所示:
#!/bin/bash
python script1.py
python script2.py
python script3.py
此外,一般来说,我会将 Python 脚本的第一行作为 shebang,如下所示:
#!/usr/bin/env python
print('I am a Python script with shebang')
然后我将使脚本可执行:
chmod +x script.py
现在,而不是 运行将它与:
python script.py
内核知道要使用哪个解释器,所以我不必每次都告诉它,我可以简单地运行它:
script.py
如果它所在的目录在我的 PATH 上。或者,如果它不在我的路径上,我需要:
/path/to/script.py
用例
如果您以后想添加更多脚本,建议您创建一个 run.py 文件,负责将参数(整数)传递给 shell 文件。
假设您喜欢 运行 n(4) 数量的 shell 脚本或 python 接受 1 参数的脚本。
使用以下代码创建文件 run.python。
下面的代码说明
- instanceQty = shell 脚本到 运行 的数量
- os.getcwd() = 当前文件的路径
- mockScript.sh = shell 脚本 与 run.py[ 放在同一个目录下=46=]
到运行shell脚本
# this is python file with name run.py
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 环境下测试。