Запуск скрипта python из другого скрипта

#python

#python

Вопрос:

Я хочу запустить скрипт python, который принимает параметры и аргументы из другого скрипта Python.

 For example run C:\code\old_start_training_generic_depth.py -i 10 -l 2 from 
C:\code\start.py
  

Ответ №1:

Вы можете сделать это с помощью subprocess.Popen , который может использоваться для запуска любого внешнего процесса из вашего кода на Python (включая другие программы на Python).

Тем не менее, я бы сделал это иначе. Поскольку обе программы написаны на Python, я бы упаковал ту, которую вы хотите вызвать, как модуль, который может быть вызван программно (т. Е. импортирован и затем вызван), вместо того, чтобы вызывать его как подпроцесс. Это может повлечь за собой небольшие затраты на разработку, но в конце концов, я верю, что это окупится, поскольку этот метод имеет много преимуществ.

Комментарии:

1. 1 за предоставление необходимого ответа, а также того, который был запрошен.

Ответ №2:

 import subprocess
subprocess.Popen(['C:\code\old_start_training_generic_depth.py', '-i', '10', '-l', '2']).wait()
  

Комментарии:

1. Не могли бы вы просто communicate() выбросить результаты?

Ответ №3:

 import subprocess

def runscript():
    '''
    Run a script
    '''

    cmd_list = ["python", r"C:codeold_start_training_generic_depth.py", 
                "-i", "10", "-l", "2"]

    pipe = subprocess.Popen(cmd_list, stdin=subprocess.PIPE, 
                    stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

    stdout, stderr = pipe.communicate()
    retcode = pipe.poll()

    return (retcode, stdout, stderr)
  

Ответ №4:

C:codestart.py:

 import subprocess
subprocess.Popen(["python", r"C:codeold_start_training_generic_depth.py", "-i", "10", "-l", "2"])
  

Комментарии:

1. Хотя часто лучше использовать sys.executable вместо жесткого кодирования "python" , чтобы справиться с несколькими версиями Python, установленными в системе.

Ответ №5:

 # once upon a time somewhere in the start.py
os.system("python C:\code\old_start_training_generic_depth.py -i 10 -l 2")
  

Комментарии:

1. Нет! os.system — неправильный способ сделать это. os.system

2. os.system будет работать отлично. Я предполагаю, что @Jakob имеет в виду, что subprocess.Popen это лучшая альтернатива.

3. Если вам не нужно передавать ввод / перехватывать вывод, я не вижу, что не так с os.system.