0

这是我的程序(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>

但是我如何像使用 msdos 命令行那样在 python 交互模式下传递 -h 选项?

4

2 回答 2

1

也许您可以尝试使用自定义来破解某些东西,sys.argv但这太hacky了,请改用:

>>> from subprocess import call
>>> call(['./test.py', option1, option2, ...])
于 2013-08-18T00:10:33.813 回答
0

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

所以这样做:

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

如果您的模块没有__name__检查,您可以只分配给sys.argv

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

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

>>> reload(test)

注意:在 Python2reload中是内置的,但在 Python3 中是在 module 中imp

于 2013-08-18T00:56:43.947 回答