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
這是第一個模塊的幫助。發生了什麼?我該如何解決它?
分析器也許應該測試塊被定義爲好,但是這將是對性能的原因s,而不會影響腳本的輸出或功能。 – chepner
@chepner:實際上,有些用例可以導入命令行參數解析器。該對象僅定義*一次*,幾乎不是性能瓶頸。 –