Tôi thích mô-đun argparse
. argparse.FileType
cũng hữu ích, trừ khi bạn muốn mặc định là một cái gì đó khác hơn sys.std*
vì tệp đầu ra mặc định được tạo ngay cả khi bạn cung cấp giá trị .Cách dừng argparse.FileType tạo tệp được chỉ định làm mặc định
Ví dụ:
parser.add_argument('--outfile', type=FileType('w'), default="out.txt")
sẽ tạo out.txt ngay cả khi bạn chỉ định một tập tin với --outfile.
Điều tốt nhất tôi có thể đưa ra là:
class MagicFileType(object):
def __init__(self, *args, **kwargs):
# save args/kwargs and set filetype to None
self.filetype = None
self.args = args
self.kwargs = kwargs
def __getattr__(self, attr):
""" Delegate everything to the filetype """
# If we haven't created it, now is the time to do so
if self.filetype is None:
self.filetype = FileType(*self.args, **self.kwargs)
self.filetype = self.filetype(self.filename)
return getattr(self.filetype, attr)
def __call__(self, filename):
""" Just cache the filename """
# This is called when the default is created
# Just cache the filename for now.
self.filename = filename
return self
Nhưng nếu cảm thấy như thế này nên được dễ dàng hơn, tôi thiếu cái gì?
Trong khi tôi thực sự thích câu hỏi của bạn và giải pháp của bạn, tôi không thể tái sản xuất này. Tôi đã tạo một ví dụ nhỏ và khi tôi chỉ định '--outfile', tôi chỉ nhận được tệp mà tôi đã chỉ định được tạo ra chứ không phải cả hai. Bạn đang sử dụng phiên bản python nào? Có lẽ đó là một lỗi trong mô-đun 'argparse' cho một phiên bản nhất định. Tôi đang ở trên 2.7.5 – Brian
Điều đó thật thú vị, @ Brian. [Chương trình này] (http://ideone.com/gC9F0t) khẳng định cài đặt 2.7.3 của tôi và 3.2.3 của tôi. –
có thể trùng lặp của [Chỉ định tên tệp mặc định bằng argparse, nhưng không mở chúng trên --help?] (Http://stackoverflow.com/questions/8236954/specifying-default-filenames-with-argparse-but-not-opening- chúng-on-help) –