Как запустить несколько скриптов Python / Shell из одного скрипта - PullRequest
1 голос
/ 18 июня 2020

У меня есть 4 python и сценарии оболочки, которые я хотел бы запускать один за другим из одного 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.

Кто-нибудь может помочь с этим, пожалуйста? заранее спасибо!

1 Ответ

1 голос
/ 18 июня 2020

Я бы сделал это:

#!/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 здесь, потому что я полагаюсь на оболочку для интерпретации && и позволяю запускать следующий процесс только в том случае, если предыдущий был успешным.


Если вы хотите, чтобы все они работали параллельно друг с другом, и в фоновом режиме:

#!/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 здесь, потому что я полагаюсь на оболочку, чтобы интерпретировать & как означающее, что я хочу, чтобы процессы выполнялись в фоновом режиме, чтобы я могут продолжать делать что-то еще во время работы.


В общем, я бы вообще не использовал Python для этого, я бы написал сценарий bash вроде этого:

#!/bin/bash

python script1.py
python script2.py
python script3.py

Также, как правило, я бы сделал первую строку сценария Python следующим образом:

#!/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
...