Я хотел бы запустить команду в Python Shell для выполнения файла с аргументом.
Например: execfile("abc.py"), но как добавить 2 аргумента?
Я хотел бы запустить команду в Python Shell для выполнения файла с аргументом.
Например: execfile("abc.py"), но как добавить 2 аргумента?
 execfile запускает файл Python, но загружая его, а не как script. Вы можете передавать только переменные привязки, а не аргументы.
Если вы хотите запустить программу из 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')
import sys
import subprocess
subprocess.call([sys.executable, 'abc.py', 'argument1', 'argument2'])
Вы запутываете загрузку модуля в текущий процесс интерпретатора и вызывают Python script извне.
Первый может быть сделан import с интересующим вас файлом. execfile похож на импорт, но он просто оценивает файл, а не создает из него модуль. Аналогично "sourcing" в оболочке script.
Последнее может быть выполнено с использованием модуля подпроцесса. Вы создаете другой экземпляр интерпретатора и передаете все параметры, которые вы хотите. Это похоже на обход в оболочке script с использованием обратных ссылок.
Вы не можете передавать аргументы командной строки с помощью execfile(). Посмотрите subprocess.
Для более интересных сценариев вы также можете посмотреть модуль runpy. Начиная с python 2.7, он имеет функцию run_path. Например:
import runpy
import sys
# argv[0] will be replaced by runpy
# You could also skip this if you get sys.argv populated
# via other means
sys.argv = ['', 'arg1' 'arg2']
runpy.run_path('./abc.py', run_name='__main__')
Помимо 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']