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、これはハックしすぎます。代わりに次を使用してください。

>>> 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)

注: Python2 では組み込みreloadですが、Python3 では module 内にありますimp

于 2013-08-18T00:56:43.947 に答える