如何使用python的命令行shell传递命令行选项?

时间:2013-08-18 00:00:35

标签: python

这是我的程序(test.py):

#!/usr/bin/python
import sys, getopt
def main(argv):
   inputfile = ''
   outputfile = ''
   try:
      opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])
   except getopt.GetoptError:
      print 'test.py -i <inputfile> -o <outputfile>'
      sys.exit(2)
   for opt, arg in opts:
      if opt == '-h':
         print 'test.py -i <inputfile> -o <outputfile>'
         sys.exit()
      elif opt in ("-i", "--ifile"):
         inputfile = arg
      elif opt in ("-o", "--ofile"):
         outputfile = arg
   print 'Input file is "', inputfile
   print 'Output file is "', outputfile

if __name__ == "__main__":
     main(sys.argv[1:])

使用msdos命令行我可以传递-h选项(在test.py中定义),如下所示:

python test.py -h         

msdos命令行将输出以下内容:

 test.py -i <inputfile> -o <outputfile>

但是我如何在python interactive中传递-h选项 使用msdos命令行完成的模式?

2 个答案:

答案 0 :(得分:1)

可能你可以尝试使用自定义sys.argv来破解某些东西,但这太过于苛刻了,请改用:

>>> from subprocess import call
>>> call(['./test.py', option1, option2, ...])

答案 1 :(得分:0)

if __name__ == "__main__":行的整个想法是该文件既可以用作程序,也可以用作模块。

这样做:

>>> import test
>>> test.main(['-h'])

如果您的模块没有进行__name__检查,则只需分配到sys.argv

>>> import sys
>>> sys.argv = ['-h']
>>> import test

但自然这只会在第一次加载模块时起作用。对于下一次运行,您需要运行:

>>> reload(test)

注意:在Python2中reload是内置的,但在Python3中它位于模块imp中。