2013-07-18 12 views
1

我有這兩個簡單的文件: 這是tone.py:爲什麼python argparse給進口模塊而不是當前模塊提供幫助?

import argparse 
import os 
import sys 
root , pyfilename = os.path.split(os.path.abspath(__file__)) 

try: 
    parser = argparse.ArgumentParser() 
    parser.add_argument('--argone', help='argument one',default= "one") 
    parser.add_argument('--argtwo', help='argument two',default= "two") 
    parser.add_argument('--argthree', help='argument three',default= "three") 
    parser.add_argument('--argfour', help='argument three',default=False) 
    args = parser.parse_args() 
except Exception as e: 
    print "crapped" 

class One(): 
    pass 

if __name__ == "__main__" : 
    while True: 
     print (args.argone) 
     print (args.argtwo) 
     print (args.argthree) 

,這是ttwo.py:

import argparse 
import os 
import sys 
root , pyfilename = os.path.split(os.path.abspath(__file__)) 

try: 
    from tone import One 
except Exception as e: 
    print "cant import module coz: %s ; so i'm exiting"%e 
    sys.exit() 


try: 
    import defaults 
    parser = argparse.ArgumentParser() 
    parser.add_argument('--arga', help='arga',default= "a") 
    parser.add_argument('--argb', help='argb',default= "b") 
    parser.add_argument('--argc', help='argc',default= "c") 
    parser.add_argument('--argd', help='targd',default=False) 
    args = parser.parse_args() 
except Exception as e: 
    print "crapped" 


if __name__ == "__main__" : 
    print (args.arga) 
    print (args.argb) 
    print (args.argc) 

現在如果我運行tone.py的幫助下開關,我得到我的期望:

$ python tone.py -h 
usage: tone.py [-h] [--argone ARGONE] [--argtwo ARGTWO] [--argthree ARGTHREE] 
       [--argfour ARGFOUR] 

optional arguments: 
    -h, --help   show this help message and exit 
    --argone ARGONE  argument one 
    --argtwo ARGTWO  argument two 
    --argthree ARGTHREE argument three 
    --argfour ARGFOUR argument three 

但第二個給出了意想不到的結果:

$ python ttwo.py -h 
usage: ttwo.py [-h] [--argone ARGONE] [--argtwo ARGTWO] [--argthree ARGTHREE] 
       [--argfour ARGFOUR] 

optional arguments: 
    -h, --help   show this help message and exit 
    --argone ARGONE  argument one 
    --argtwo ARGTWO  argument two 
    --argthree ARGTHREE argument three 
    --argfour ARGFOUR argument three 

這是第一個模塊的幫助。發生了什麼?我該如何解決它?

回答

2

tone模塊定義的參數解析器在模塊級和它分析你的命令行參數

如果你只是想,如果tone正在運行的解析發生打印幫助信息腳本,移動電話parser.parse_args()__main__試塊:

if __name__ == '__main__': 
    # run as a script, not imported as a module 
    args = parser.parse_args() 
+0

分析器也許應該測試塊被定義爲好,但是這將是對性能的原因s,而不會影響腳本的輸出或功能。 – chepner

+0

@chepner:實際上,有些用例可以導入命令行參數解析器。該對象僅定義*一次*,幾乎不是性能瓶頸。 –