簡體   English   中英

如何從一個腳本運行多個 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

kernel 知道要使用哪個解釋器,所以我不必每次都告訴它,我可以簡單地運行它:

script.py

如果它所在的目錄在我的 PATH 上。 或者,如果它不在我的 PATH 上,我需要:

/path/to/script.py

用例

如果您以后想添加更多腳本,建議您創建一個 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 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM