我想從命令列處理多組資料的輸入,但我不知道該怎么做。我認為具有多個位置引數的多個可選引數會起作用,但我不知道該怎么做。
例如,我想獲得如下資料:
{
'id': 23423423
'host': 'hostname'
'port': 234
}
我希望能夠在命令列上輸入多個集合。我該怎么做?
我的想法是有一個命令列,如:
python check.py -d 23423423 hostname.com 234 -d 22332322 hostname2.com 234
我一直在查看 argparse 以了解如何做到這一點,但是如何做到這一點卻讓我望而卻步。
uj5u.com熱心網友回復:
感覺它可以改進,但是您可以定義一個自定義子類_AppendAction來獲取 3 個引數并dict使用它們構建一個。
import argparse
p = argparse.ArgumentParser()
class Config(argparse._AppendAction):
def __call__(self, parser, namespace, values, option_string):
id_ = int(values[0])
port = int(values[2])
d = {"id": id_, "host": values[1], "port": port}
return super().__call__(parser, namespace, d, option_string)
p.add_argument("-d", nargs=3, action=Config, metavar=("ID", "HOST", "PORT"))
print(p.parse_args())
然后
$ python3 tmp.py -d 23423423 hostname.com 234 -d 22332322 hostname2.com 234
Namespace(d=[{'id': '23423423', 'host': 'hostname.com', 'port': 234}, {'id': '22332322', 'host': 'hostname2.com', 'port': 234}])
(我更喜歡類似的東西
def Config(t):
return {"id": t[0], "host": t[1], "port": int(t[2])}
p.add_argument("-d", nargs=3, action='append', type=Config)
其中將 3 個引數聚合為單個物件的行為與將結果附加到目標是分開dict的,但每個單獨的引數分別傳遞給型別,而不是將三個字串作為單個元組傳遞。唉。)
uj5u.com熱心網友回復:
可以按如下方式進行。
import argparse
parser = argparse.ArgumentParser(description='')
parser.add_argument("-d", nargs=" ", action='append')
args = parser.parse_args()
print(args.d)
運行python check.py -d 23423423 hostname.com 234 -d 22332322 hostname2.com 234將被決議為如下串列串列。
[['23423423', 'hostname.com', '234'], ['22332322', 'hostname2.com', '234']]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/397244.html
上一篇:如何統一使用Python制作和訓練的機器學習模型來預測某些事情?
下一篇:如何回傳最后一條評論?
