2 回答

TA貢獻1789條經驗 獲得超8個贊
看看sys.argv[1:]名單。我希望它會是
['-c', '-i', 'D:\Temp\dir1', '-d', 'D:\Temp\out.db', '-t', 'D:\Temp\ddl.sql', '-i', 'D:\Temp\dir2']
請注意,'-c -i' 是分開的。因為允許縮寫,所以-c被接受為“-c -i”標志的縮寫。但該字符串后跟“-i”和“D:...”。這是兩個論點,而不僅僅是一個。因此錯誤。
是的,您可以引用“-c -i”,這樣外殼就不會拆分它,但即使這樣也不能正常工作。我認為指定這樣的標志沒有任何意義。它不是建立在之前定義的“-i”動作之上。
In [113]: parser.parse_args(['-c -i', 'D:\Temp\dir1', '-d', 'D:\Temp\out.db',
'-t', 'D:\Temp\ddl.sql', '-i', 'D:\Temp\dir2'])
Out[113]: Namespace(d='D:\\Temp\\out.db', i='D:\\Temp\\dir2',
t='D:\\Temp\\ddl.sql', **{'c _i': 'D:\\Temp\\dir1'})
In [122]: getattr(Out[113],'c _i')
Out[122]: 'D:\\Temp\\dir1'

TA貢獻1921條經驗 獲得超9個贊
詳細說明user2357112的評論,這個“化合物名稱”不是一回事。在我的頭頂上,我無法命名執行此操作的單個程序的單個標志。
即使您設法實現了這一點(沒有什么是不可能的,盡管 argparse 將無濟于事),這個設計決定也會讓您的程序用戶大吃一驚。
添加回答
舉報