Misalkan saya memiliki potongan argparse berikut:
diags.cmdln_parser.add_argument( '--scan-time',
action = 'store',
nargs = '?',
type = int,
default = 5,
help = "Wait SCAN-TIME seconds between status checks.")
Saat ini, --help
pengembalian:
usage: connection_check.py [-h]
[--version] [--scan-time [SCAN_TIME]]
Test the reliability/uptime of a connection.
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
--scan-time [SCAN_TIME]
Wait SCAN-TIME seconds between status checks.
Saya lebih suka sesuatu seperti:
--scan-time [SCAN_TIME]
Wait SCAN-TIME seconds between status checks.
(Default = 5)
Mengintip kode bantuan formatter mengungkapkan opsi terbatas. Apakah ada cara pintar argparse
untuk mencetak nilai default --scan-time
dengan cara yang sama, atau haruskah saya hanya subkelas help
pemformat?
Jawaban:
Gunakan
argparse.ArgumentDefaultsHelpFormatter
formatter :Mengutip dokumentasi:
Perhatikan bahwa ini hanya berlaku untuk argumen yang memiliki teks bantuan yang ditentukan ; tanpa
help
nilai untuk sebuah argumen, tidak ada bantuan pesan untuk menambah informasi tentang nilai default untuk .Output yang tepat untuk opsi waktu pindai Anda kemudian menjadi:
sumber
default=
menunjukkan nilai default? Karena saya tidak suka teks 'default: None'.default
keSUPPRESS
:default=argparse.SUPPRESS
. Perhatikan bahwa dalam kasus itu tidak ada atribut akan ditambahkan ke hasil namespace jika argumen yang dihilangkan, lihat itudefault
dokumentasi .help
argumenadd_argument
dan itu akan berhasil.Tambahkan
'%(default)s'
ke parameter bantuan untuk mengontrol apa yang ditampilkan.sumber
Kelas pembungkus
Ini adalah pendekatan yang paling andal dan KERING yang saya temukan sejauh ini untuk menunjukkan default dan menggunakan formatter lain seperti
argparse.RawTextHelpFormatter
pada saat yang sama:Keluaran:
ArgumentDefaultsHelpFormatter
+RawTextHelpFormatter
multiple inheritanceBeberapa warisan hanya berfungsi, tetapi sepertinya itu bukan API publik:
Keluaran:
Ini hanya berfungsi karena seperti yang dapat kita lihat secara sepele dari sumber https://github.com/python/cpython/blob/v3.6.5/Lib/argparse.py#L648 bahwa:
RawTextHelpFormatter
mengimplementasikan_split_lines
ArgumentDefaultsHelpFormatter
mengimplementasikan_get_help_string
jadi kita bisa menebak bahwa mereka akan bekerja sama dengan baik.
Namun, ini sepertinya bukan API publik, dan juga tidak ada metode
formatter_class
, jadi saya tidak berpikir ada cara API publik untuk melakukannya saat ini.argparse
docstring mengatakan:Lihat juga: Kustomisasi pesan bantuan argparse
Diuji pada Python 3.6.5.
sumber