Tôi muốn có một số tùy chọn trong mô-đun argparse, --pm-exporttuy nhiên khi tôi cố gắng sử dụng nó như args.pm-exporttô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-exporttuy nhiên khi tôi cố gắng sử dụng nó như args.pm-exporttô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 argparsetà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à metavarkwarg để đặ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' )
metavarvà 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')
argparsesử dụngsetattrvàgetattr, vì vậydesttên không phải làdottên thuộc tính hợp lệ . Người dùng cũng có thể sử dụnggetattr.