2017-02-01 16 views
0

Я использую argv для передачи уникальных аргументов скриптам python, находясь в терминале. Очень полезно при запуске одной и той же программы в нескольких уникальных файлах (эта программа анализирует XML-файл для определенных вещей). Я создал три разные программы, которые служат уникальным целям.Ошибка при использовании Argv во время работы python в терминале

Я агрегирование своих программ на один .py файл, так что я могу использовать «импорт» в реальном запущенном экземпляре питона и затем один за другим через файлы:

>>>import xml 
>>>xml.a() 
>>>xml.b() 
>>>xml.c() 

Как я могу передать аргументы в пользу этих программ «на лету»? Я получаю синтаксическую ошибку, когда помещаю аргументы после вызова программы таким образом.

>>>xml.a() file1.xml file1.csv 
     ^
>>>SyntaxError: invalid syntax 
+0

вы не можете иметь функцию под названием '1' ... и' sys.argv' для запуска программ вне интерпретатора python. В интерпретаторе есть только параметры. –

+0

Спасибо. Изменены имена функций. Для краткости используется только 1,2,3. – James

ответ

2

Вы передать аргументы функции в Python, помещая их в скобки (они называются «параметрами» see documentation). Таким образом, вы должны изменить свои функции, с тем чтобы они могли принимать аргументы (а не читать из sys.argv), а затем запустить функцию, как:

my_library.py

def function1(filename): 
    print filename 

Переводчик

>>> import my_library 
>>> my_library.function1("file1.xml") 
>>> file1.xml 

Если вы хотите, чтобы ваша функция будет иметь возможность обрабатывать неограниченное количество аргументов (как вы можете с sys.argv), вы можете использовать синтаксис * в конце списка ваших аргументов, чтобы уловить оставшиеся параметры в виде списка (see documentation). Например:

my_library.py

def function1(*filenames): 
    for filename in filenames: 
     print filename 

Переводчик

>>> import my_library 
>>> my_library.function1("file1.xml", "file2.csv", "file3.xml") 
file1.xml 
file2.csv 
file3.xml 
+0

Спасибо. Я прочитаю документацию. – James