Gunakan nargs='?'
(atau nargs='*'
jika Anda akan membutuhkan lebih dari satu dir)
parser.add_argument('dir', nargs='?', default=os.getcwd())
contoh luas:
>>> import os, argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-v', action='store_true')
_StoreTrueAction(option_strings=['-v'], dest='v', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)
>>> parser.add_argument('dir', nargs='?', default=os.getcwd())
_StoreAction(option_strings=[], dest='dir', nargs='?', const=None, default='/home/vinay', type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args('somedir -v'.split())
Namespace(dir='somedir', v=True)
>>> parser.parse_args('-v'.split())
Namespace(dir='/home/vinay', v=True)
>>> parser.parse_args(''.split())
Namespace(dir='/home/vinay', v=False)
>>> parser.parse_args(['somedir'])
Namespace(dir='somedir', v=False)
>>> parser.parse_args('somedir -h -v'.split())
usage: [-h] [-v] [dir]
positional arguments:
dir
optional arguments:
-h, --help show this help message and exit
-v
?
dan*
hal yang sama yang mereka maksudkan dalam ekspresi reguler (yaitu?
membutuhkan 0 atau 1, dan*
membutuhkan 0 atau lebih)? Jika demikian, apakah+
berhasil juga?+
bekerja juga. Lihat docs.python.org/2/library/argparse.html#nargs untuk detailnya.options.dir
, tidakargs.dir
, saat saya mencoba!Sebagai ekstensi untuk jawaban @VinaySajip. Ada tambahan yang
nargs
layak disebut .parser.add_argument('dir', nargs=1, default=os.getcwd())
N (bilangan bulat). N argumen dari baris perintah akan dikumpulkan bersama menjadi daftar
parser.add_argument('dir', nargs='*', default=os.getcwd())
'*'. Semua argumen baris perintah yang ada dikumpulkan ke dalam daftar. Perhatikan bahwa pada umumnya tidak masuk akal untuk memiliki lebih dari satu argumen posisi
nargs='*'
, tetapi beberapa argumen opsional dengannargs='*'
dimungkinkan.parser.add_argument('dir', nargs='+', default=os.getcwd())
'+'. Sama seperti '*', semua argumen baris perintah yang ada dikumpulkan ke dalam daftar. Selain itu, pesan kesalahan akan dihasilkan jika tidak ada setidaknya satu argumen baris perintah.
parser.add_argument('dir', nargs=argparse.REMAINDER, default=os.getcwd())
argparse.REMAINDER
. Semua argumen baris perintah yang tersisa dikumpulkan ke dalam daftar. Ini biasanya berguna untuk utilitas baris perintah yang mengirim ke utilitas baris perintah lainnyaJika
nargs
argumen kata kunci tidak disediakan, jumlah argumen yang dikonsumsi ditentukan oleh tindakan. Secara umum ini berarti argumen baris perintah tunggal akan dikonsumsi dan satu item (bukan daftar) akan diproduksi.Edit (disalin dari komentar oleh @Acumenus)
nargs='?'
Dokumen mengatakan: '?'. Satu argumen akan dikonsumsi dari baris perintah jika memungkinkan dan diproduksi sebagai satu item. Jika tidak ada argumen baris perintah, nilai dari default akan dihasilkan.sumber
nargs='?'
itu tidak menghasilkan daftar.Generally this means a single command-line argument will be consumed and a single item (not a list) will be produced.
Semoga ini bisa membantu ...nargs
, tetapinargs='?'
mendefinisikannya. The docs mengatakan: '?'. Satu argumen akan dikonsumsi dari baris perintah jika memungkinkan, dan diproduksi sebagai satu item. Jika tidak ada argumen baris perintah, nilai dari default akan dihasilkan.nargs=argparse.REMAINDER
dannargs='*'
, menurut saya, keduanya identik dalam pengaruhnya (diuji dengan Python 2.7.10 dan Python 3.6.1)?parser.add_argument
juga memiliki saklar yang diperlukan . Anda bisa menggunakannyarequired=False
. Berikut ini cuplikan sampel dengan Python 2.7:sumber