10 ответов:
execfileзапускает файл Python, но загружая его, а не как скрипт. Вы можете передавать только привязки переменных, а не аргументы.Если вы хотите запустить программу из Python, используйте
subprocess.call. Е. Г.subprocess.call(['./abc.py', arg1, arg2])
попробуйте это:
import sys sys.argv = ['arg1', 'arg2'] execfile('abc.py')обратите внимание, что при
abc.pyготово, управление будет возвращено вызывающей программе. Обратите внимание также, чтоabc.pyможно назватьquit()если действительно закончена.
на самом деле, разве мы не хотели бы сделать это?
import sys sys.argv = ['abc.py','arg1', 'arg2'] execfile('abc.py')
вы путаете загрузку модуля в текущий процесс интерпретатора и вызов скрипта Python извне.
первое можно сделать с помощью
importing файл, который вас интересует. execfile похоже на импорт, но он просто оценивает файл, а не создает из него модуль. Похоже на" sourcing " в сценарии оболочки.последнее можно сделать с помощью модуля подпроцесса. Вы порождаете другой экземпляр интерпретатора и передайте любые параметры, которые вы хотите, чтобы это. Это похоже на обстрел в сценарии оболочки с использованием обратных палочек.
для более интересных сценариев, вы также можете посмотреть на
runpyмодуль. Начиная с python 2.7, он имеет
вы не можете передать аргументы командной строки
execfile(). Посмотри наsubprocess.
кроме того
subprocess.call, вы также можете использоватьsubprocess.Popen. Как и следующие
subprocess.Popen(['./script', arg1, arg2])
если вы устанавливаете
PYTHONINSPECTв файле python, который вы хотите выполнить[repl.py]
import os import sys from time import time os.environ['PYTHONINSPECT'] = 'True' t=time() argv=sys.argv[1:len(sys.argv)]нет необходимости использовать
execfile, а вы можете напрямую запустить файл с аргументами, как обычно в доспехах:python repl.py one two 3 >>> t 1513989378.880822 >>> argv ['one', 'two', '3']
Если вы хотите запустить скрипты параллельно и дать им разные аргументы, вы можете сделать, как показано ниже.
import os os.system("python script.py arg1 arg2 & python script.py arg11 arg22")
Comments