Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: cinnamon 30. 09. 2018, 10:05:11

Název: Python - parsování parametrů skriptu
Přispěvatel: cinnamon 30. 09. 2018, 10:05:11
Nemá někdo zkušenosti s knihovnout argparse? Potřeboval bych procházet všechny parametry (a jejich hodnoty) předané při volání skriptu, aniž by se musely před parsováním definovat pomocí add_argument.
Název: Re:Python - parsování parametrů skriptu
Přispěvatel: wamba 30. 09. 2018, 10:40:32
nargs=argparse.REMAINDER by mohlo pomoci, viz https://docs.python.org/3/library/argparse.html#nargs (https://docs.python.org/3/library/argparse.html#nargs)
Kód: [Vybrat]
python -c 'import argparse; parser = argparse.ArgumentParser(); parser.add_argument(\'args\', nargs=argparse.REMAINDER); print(parser.parse_args())' 1 -help 1 --as  3
Kód: [Vybrat]
Namespace(args=['1', '-help', '1', '--as', '3'])
Název: Re:Python - parsování parametrů skriptu
Přispěvatel: cinnamon 30. 09. 2018, 11:07:16
nargs=argparse.REMAINDER by mohlo pomoci, viz https://docs.python.org/3/library/argparse.html#nargs (https://docs.python.org/3/library/argparse.html#nargs)
Kód: [Vybrat]
python -c 'import argparse; parser = argparse.ArgumentParser(); parser.add_argument(\'args\', nargs=argparse.REMAINDER); print(parser.parse_args())' 1 -help 1 --as  3
Kód: [Vybrat]
Namespace(args=['1', '-help', '1', '--as', '3'])

Jak jsi to napsal, tak to samozřejmě funguje, ale když zadám parametr ve tvaru
Kód: [Vybrat]
--test-directory=$HOME/testtak parsování skončí chybou unrecognized arguments
Název: Re:Python - parsování parametrů skriptu
Přispěvatel: cinnamon 30. 09. 2018, 14:06:58
Tak nakonec jsem naznal, že pro moje účely je argparse kanónem na vrabce, sprostě projdu sys.argv[1:] a položky rozparsuju pomocí item.partition('=').
Název: Re:Python - parsování parametrů skriptu
Přispěvatel: Sajfi 30. 09. 2018, 14:48:24
Případně co modul getopt https://docs.python.org/3.7/library/getopt.html ?
Název: Re:Python - parsování parametrů skriptu
Přispěvatel: Štěpán Burian 01. 10. 2018, 09:36:52
A co zkusit @click? Asi to úplně neodpovídá na dotaz... ale co kkdyby náhodou.
Video z LinuxDays o @click https://www.youtube.com/watch?v=kRY2UGhjRb0
Název: Re:Python - parsování parametrů skriptu
Přispěvatel: Karel 01. 10. 2018, 10:10:42
Chci pouzit argparse, ale nechce se mi ho konfigurovat. Asi tak nejak zni dotaz.
Název: Re:Python - parsování parametrů skriptu
Přispěvatel: Inkvizitor 01. 10. 2018, 10:14:09
Chci pouzit argparse, ale nechce se mi ho konfigurovat. Asi tak nejak zni dotaz.

Spis mi prijde, ze ho chce pouzit zpusobem, jakym nebyl zamyslen pouzivat (tj. a la **kwArgs).
Název: Re:Python - parsování parametrů skriptu
Přispěvatel: cinnamon 01. 10. 2018, 11:08:33
Chci pouzit argparse, ale nechce se mi ho konfigurovat. Asi tak nejak zni dotaz.

Spis mi prijde, ze ho chce pouzit zpusobem, jakym nebyl zamyslen pouzivat (tj. a la **kwArgs).

Přesně tak, argparse dělá trochu něco jiného, než jsem potřeboval.
Název: Re:Python - parsování parametrů skriptu
Přispěvatel: karel 01. 10. 2018, 14:43:41
Chci pouzit argparse, ale nechce se mi ho konfigurovat. Asi tak nejak zni dotaz.

Spis mi prijde, ze ho chce pouzit zpusobem, jakym nebyl zamyslen pouzivat (tj. a la **kwArgs).

Přesně tak, argparse dělá trochu něco jiného, než jsem potřeboval.

Pak bych neztracel cas argparse, sel by pouzit click nebo si to proste oprogramovat
Název: Re:Python - parsování parametrů skriptu
Přispěvatel: gll 01. 10. 2018, 19:33:49
Pak bych neztracel cas argparse, sel by pouzit click nebo si to proste oprogramovat

click vznikl před argparse, v pythonu 3 ho není důvod ho používat.
Název: Re:Python - parsování parametrů skriptu
Přispěvatel: gll 01. 10. 2018, 19:41:40
asi chcete použít metodu parse_known_args

Kód: [Vybrat]
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo')
>>> args, unknown = parser.parse_known_args(['--foo', 'foo', '--unknown1', 'unknow1'])
>>> args
Namespace(foo='foo')
>>> unknown
['--unknown1', 'unknow1']