Пожалуйста, используйте multiprocessing
и subprocess
. При использовании специального сценария оболочки, если его нет в переменной PATH, используйте полный путь к сценарию. Если ваш скрипт находится в той же папке, что и скрипт python, используйте ./script.sh
в качестве команды.
Также убедитесь, что есть exe c разрешение для сценария, который вы запускаете
from multiprocessing import Pool
import subprocess
def run_script(input):
(command,arg_str)=input
print("Starting command :{} with argument {}".format(command, arg_str))
result = subprocess.call(command+" "+arg_str, shell=True)
print("Completed command :{} with argument {}".format(command, arg_str))
return result
with Pool(5) as p: # choose appropriate level of parallelism
# choose appropriate command and argument, can be fetched from sys.argv if needed
exit_codes = p.map(run_script, [('echo','hello1'), ('echo','hello2')])
print("Exit codes : {}".format(exit_codes))
. Вы можете использовать коды завершения для проверки статуса завершения. Пример вывода:
Starting command :echo with argument hello1
Starting command :echo with argument hello2
hello1
hello2
Completed command :echo with argument hello1
Completed command :echo with argument hello2
Exit codes : [0, 0]
Другой способ сделать это (без python) - использовать GNU Parallel. Приведенная ниже команда выполняет то же самое, что и приведенный выше скрипт python.
parallel -k echo ::: 'hello1' 'hello2'