Выполнить файл с аргументами в оболочке Python

Я хотел бы запустить команду в Python Shell для выполнения файла с аргументом.

Например: execfile("abc.py"), но как добавить 2 аргумента?

Ответ 1

execfile запускает файл Python, но загружая его, а не как script. Вы можете передавать только переменные привязки, а не аргументы.

Если вы хотите запустить программу из Python, используйте subprocess.call. Например.

subprocess.call(['./abc.py', arg1, arg2])

Ответ 2

попробуйте следующее:

import sys
sys.argv = ['arg1', 'arg2']
execfile('abc.py')

Обратите внимание, что при завершении abc.py управление будет возвращено вызывающей программе. Также обратите внимание, что abc.py может вызвать quit(), если он действительно закончен.

Ответ 3

Собственно, не хотим ли мы этого сделать?

import sys
sys.argv = ['abc.py','arg1', 'arg2']
execfile('abc.py')

Ответ 4

import sys
import subprocess

subprocess.call([sys.executable, 'abc.py', 'argument1', 'argument2'])

Ответ 5

Вы запутываете загрузку модуля в текущий процесс интерпретатора и вызывают Python script извне.

Первый может быть сделан import с интересующим вас файлом. execfile похож на импорт, но он просто оценивает файл, а не создает из него модуль. Аналогично "sourcing" в оболочке script.

Последнее может быть выполнено с использованием модуля подпроцесса. Вы создаете другой экземпляр интерпретатора и передаете все параметры, которые вы хотите. Это похоже на обход в оболочке script с использованием обратных ссылок.

Ответ 6

Вы не можете передавать аргументы командной строки с помощью execfile(). Посмотрите subprocess.

Ответ 7

Для более интересных сценариев вы также можете посмотреть модуль 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__')

Ответ 8

Помимо subprocess.call, вы также можете использовать subprocess.Popen. Как показано ниже

subprocess.Popen(['./script', arg1, arg2])

Ответ 9

Если вы установили 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']