Tôi muốn có một số tùy chọn trong mô-đun argparse, --pm-export
tuy nhiên khi tôi cố gắng sử dụng nó như args.pm-export
tôi gặp lỗi không có thuộc tính pm
. Làm thế nào tôi có thể khắc phục vấn đề này? Có thể có -
trong các tùy chọn dòng lệnh?
Tôi muốn có một số tùy chọn trong mô-đun argparse, --pm-export
tuy nhiên khi tôi cố gắng sử dụng nó như args.pm-export
tôi gặp lỗi không có thuộc tính pm
. Làm thế nào tôi có thể khắc phục vấn đề này? Có thể có -
trong các tùy chọn dòng lệnh?
Câu trả lời:
Như đã nêu trong các argparse
tài liệu :
Đối với các hành động đối số tùy chọn, giá trị của mệnh thường được suy ra từ các chuỗi tùy chọn. ArgumentParser tạo ra giá trị của mệnh bằng cách lấy chuỗi tùy chọn dài đầu tiên và tước
--
chuỗi ban đầu . Mọi-
ký tự bên trong sẽ được chuyển đổi thành_
ký tự để đảm bảo chuỗi là tên thuộc tính hợp lệ
Vì vậy, bạn nên sử dụng args.pm_export
.
Thật không may, thay thế dấu gạch ngang để gạch dưới không hoạt động đối với các vị trí theo vị trí (không được tiền tố bởi --
) như
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('logs-dir',
help='Directory with .log and .log.gz files')
parser.add_argument('results-csv', type=argparse.FileType('w'),
default=sys.stdout,
help='Output .csv filename')
args = parser.parse_args()
print args
# gives
# Namespace(logs-dir='./', results-csv=<open file 'lool.csv', mode 'w' at 0x9020650>)
Vì vậy, bạn nên sử dụng đối số 1 để add_argument()
làm tên thuộc tính và metavar
kwarg để đặt cách nó sẽ tìm trong trợ giúp:
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('logs_dir', metavar='logs-dir',
nargs=1,
help='Directory with .log and .log.gz files')
parser.add_argument('results_csv', metavar='results-csv',
nargs=1,
type=argparse.FileType('w'),
default=sys.stdout,
help='Output .csv filename')
args = parser.parse_args()
print args
# gives
# Namespace(logs_dir=['./'], results_csv=[<open file 'lool.csv', mode 'w' at 0xb71385f8>])
positional_arg = getattr( parser, 'positional-arg' )
metavar
và không thể hiểu tại sao nó không hoạt động. Cảm ơn!
Dấu gạch ngang được chuyển đổi thành dấu gạch dưới:
import argparse
pa = argparse.ArgumentParser()
pa.add_argument('--foo-bar')
args = pa.parse_args(['--foo-bar', '24'])
print args # Namespace(foo_bar='24')
argparse
sử dụngsetattr
vàgetattr
, vì vậydest
tên không phải làdot
tên thuộc tính hợp lệ . Người dùng cũng có thể sử dụnggetattr
.