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



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



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

499   10  

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')
import sys
import subprocess

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

вы путаете загрузку модуля в текущий процесс интерпретатора и вызов скрипта 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

    Ничего не найдено.