如何在Python 2.x交互模式下向模块传递参数

7
我将使用Python 2.7,下面是一个简单的脚本,需要一个命令行参数:
#!/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

但我不知道如何操作。我该如何在交互式编辑器中传递参数以导入/重新加载?
1个回答

6

你不能这样做。将你的代码放在函数内部。

#!/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库。在调用主函数之前,还可以检查命令行参数的数量:
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__': 时,你可以在这里找到关于发生了什么的好的解释: if __name__ == "__main__"是做什么用的?


2
你还应该添加一个交互式调用脚本的示例,以使你的答案更完整。 - Duncan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接