Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从一个脚本运行多个Python/Shell脚本_Python_Shell_Subprocess - Fatal编程技术网

如何从一个脚本运行多个Python/Shell脚本

如何从一个脚本运行多个Python/Shell脚本,python,shell,subprocess,Python,Shell,Subprocess,我有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 ch

我有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
#!/usr/bin/env python

print('I am a Python script with shebang')
另外,一般来说,我会将Python脚本的第一行设为shebang,如下所示:

#!/bin/bash

python script1.py
python script2.py
python script3.py
#!/usr/bin/env python

print('I am a Python script with shebang')
然后,我将使用以下命令使脚本可执行:

chmod +x script.py
现在,不要使用以下命令运行它:

python script.py
内核知道要使用哪个解释器,因此我不必每次都告诉它,我可以简单地使用以下命令运行它:

script.py
如果它所在的目录在我的路径上。或者,如果它不在我的路径上,我需要:

/path/to/script.py

他们是否定义了
main
func?他们是否有
if\uuu name==“main”:
子句?不,那些脚本没有这个子句。因此只要
import
就可以让它们运行(它实际上只是执行脚本…)类似这样的事情吗?试着养成习惯,将shebang作为脚本的第一行,这样读者和内核就知道您要为哪个解释器编写,这样您就不必一直键入
python script.py