我正在將shell腳本轉換爲Python。是否可以使用argparse來處理複雜的混合和匹配命令行參數(無選項)?
shell腳本支持這樣的參數。
在「命令」部分列出Usage: foo [-h] [-v] [COMMAND] [COMMAND_ARG]...
One or more of the following commands may be specified in the same
command line invocation of this script.
Commands:
print Print lines in CSV.
search PATTERN Print only lines that match PATTERN.
remove PATTERN Remove all lines that match PATTERN.
convert Convert CSV file to XLS file.
limit N Show a maximum of N results (default 10).
all Do not limit lines.
Options:
-h, --help Show help.
-v, --version Show version.
一個或多個參數可以被混合和匹配 但它們中的一些是相互排斥的。
例如,以下所有內容都是有效的命令行調用。
# Prints 10 lines from CSV
foo print
# Prints 3 lines from CSV
foo print limit 3
foo limit 3 print
# Prints all lines from CSV
foo print all
foo all print
# Converts 10 lines from CSV into XLS
foo convert
# Converts 3 lines from CSV into XLS
foo limit 3 convert
foo convert limit 3
# Search for the word "foo" in CSV and print 3 such lines
foo search "\<foo\>" limit 3
foo limit 3 search "\<foo\>"
然而,print
,search
,remove
和convert
是相互 排斥。所以以下是無效的。
foo print convert
foo search "\<foo\>" remove "\<foo\>"
是否可以處理命令行參數,像這些用 ?或者我最好是循環利用sys.argv
我自己, 用我自己的代碼處理這些情況,這也意味着我有 負責更新幫助消息和任何必要的驗證 每當支持的參數列表發生變化時?
注意:我不想依賴模塊的任何內部實現來實現此目的。我只想依靠公開記錄的的API。如果用公開記錄的API來解決這個問題是不可能的,那麼這很好,那就是答案。在這種情況下,我會自己處理命令行參數,通過循環遍歷sys.argv
類似於shell腳本通過循環遍歷"[email protected]"
來處理參數。
通過將'all'和'limit'轉換爲'--all'和'--limit'來改變命令行界面,我不能這樣做,因爲用戶已經依靠'all'和'limit'作爲參數。我的問題是,命令行界面必須保持不變。因此,我需要決定是否應該使用'argparse',或者如果我應該編寫我的代碼來處理命令行參數。 –
好的,那麼不,不是你可以直接用'argparse'完成的事情。我確實已經說清楚它是「大部分」,而不是「完全」。 – ShadowRanger