如何从一个脚本运行多个 Python/Shell 脚本
Posted
技术标签:
【中文标题】如何从一个脚本运行多个 Python/Shell 脚本【英文标题】:How to run multiple Python/Shell scripts from one script 【发布时间】:2020-10-08 10:31:54 【问题描述】:我有 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.
有人可以帮忙吗?提前致谢!
【问题讨论】:
他们定义了main
函数吗?他们有if __name == 'main':
子句吗?
不,那些脚本没有这个子句。
所以import
应该让它们运行(它确实只是执行脚本......)
docs.python.org/3/library/… 是这样的吗?
尝试养成将 shebang 作为脚本第一行的习惯,以便读者和内核知道您正在为哪个解释器编写代码,这样您就不必继续输入 python script.py
一直都是。
【参考方案1】:
我会这样做:
#!/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 上,我需要:
/path/to/script.py
【讨论】:
【参考方案2】:用例
如果您以后想添加更多脚本,建议您创建一个 run.py 文件,负责将参数(整数)传递给 shell 文件。
假设您喜欢运行 n(4) 个接受 1 参数的 shell 脚本或 python 脚本。
使用以下代码创建文件run.python。
以下代码说明
instanceQty = 要运行的 shell 脚本数量 os.getcwd() = 当前文件的路径 mockScript.sh = shell 脚本 我与 run.py 放在同一目录中运行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 运行.py
MacOS 权限问题
sudo chmod ug+x mockScript.sh
sudo chmod ug+x run.py
所有代码均在 Python 3.8.1 和 MacOs 12.0.1 环境下测试。
【讨论】:
以上是关于如何从一个脚本运行多个 Python/Shell 脚本的主要内容,如果未能解决你的问题,请参考以下文章