[英]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
kernel 知道要使用哪個解釋器,所以我不必每次都告訴它,我可以簡單地運行它:
script.py
如果它所在的目錄在我的 PATH 上。 或者,如果它不在我的 PATH 上,我需要:
/path/to/script.py
用例
如果您以后想添加更多腳本,建議您創建一個 run.py 文件,負責將參數(整數)傳遞給 shell 文件。
假設您喜歡運行 n(4) 個接受1 個參數的 shell 腳本或 python 腳本。
使用以下代碼創建文件run.python 。
下面的代碼說明
運行 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 環境中測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.