2013-09-17 2 views
6

Я использую Python 2.7, и у меня есть следующий простой скрипт, который ожидает один аргумент командной строки:как передать аргументы модуля в Python 2.x интерактивном режиме

#!/usr/bin/env python 

import sys 

if (len(sys.argv) == 2): 
    print "Thanks for passing ", sys.argv[1] 
else: 
    print "Oops." 

я могу сделать что-то как из командной строки:

My-Box:~/$ ./useArg.py asdfkjlasdjfdsa 
    Thanks for passing asdfkjlasdjfdsa 

или это:

My-Box:~/$ ./useArg.py 
    Oops. 

Я хотел бы сделать что-то подобное от интерактивного редактора:

>>> import useArg asdfasdf 
    File "<stdin>", line 1 
    import useArg asdfasdf 
         ^
SyntaxError: invalid syntax 

но я не знаю как. Как передать параметры для импорта/перезагрузки в интерактивном редакторе?

ответ

5

Вы не можете. Заверните код внутри функции

#!/usr/bin/env python 

import sys 

def main(args): 
    if (len(args) == 2): 
     print "Thanks for passing ", args[1] 
    else: 
     print "Oops." 

if __name__ == '__main__': 
    main(sys.argv) 

Если выполнить скрипт из командной строки вы можете сделать это, как и прежде, если вы хотите использовать его от переводчика:

import useArg 
useArg.main(['foo', 'bar']) 

В этом случае вы должны используйте некоторое фиктивное значение в первой позиции списка, поэтому в большинстве случаев гораздо лучше использовать argparse library. Вы также можете проверить количество аргументов командной строки перед вызовом основной функции:

import sys 

def main(arg): 
    print(arg) 

if __name__ == '__main__': 
    if len(sys.argv) == 2: 
     main(sys.argv[1]) 
    else: 
     main('Oops') 

Вы можете найти хорошее объяснение того, что происходит, когда вы выполняете if __name__ == '__main__': здесь: What does if __name__ == "__main__": do?

+2

Вы также должны добавить пример того, как для интерактивного вызова сценария, чтобы завершить ваш ответ. – Duncan

+0

Спасибо за быстрый ответ. Это именно то, что я искал. – Ampers4nd

Смежные вопросы