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