Tập lệnh python của tôi cần đọc các tệp từ thư mục được truyền trên dòng lệnh. Tôi đã định nghĩa một kiểu readable_dir như dưới đây để được sử dụng với argparse để xác nhận rằng thư mục được truyền trên dòng lệnh là tồn tại và có thể đọc được. Ngoài ra, giá trị mặc định (/ tmp/non_existent_dir trong ví dụ bên dưới) cũng đã được chỉ định cho đối số thư mục. Vấn đề ở đây là argparse gọi readable_dir() trên giá trị mặc định ngay cả trong trường hợp đối số thư mục được truyền vào dòng lệnh một cách rõ ràng. Điều này làm cho kịch bản trở nên khó hiểu vì đường dẫn mặc định/tmp/non_existent_dir không tồn tại trong một ngữ cảnh mà thư mục được truyền vào dòng lệnh một cách rõ ràng. Tôi có thể giải quyết vấn đề này bằng cách không chỉ định giá trị mặc định và làm cho đối số này bắt buộc hoặc trì hoãn xác thực cho đến sau này trong tập lệnh nhưng là giải pháp thanh lịch hơn mà mọi người đều biết?loại đường dẫn thư mục với argparse
#!/usr/bin/python
import argparse
import os
def readable_dir(prospective_dir):
if not os.path.isdir(prospective_dir):
raise Exception("readable_dir:{0} is not a valid path".format(prospective_dir))
if os.access(prospective_dir, os.R_OK):
return prospective_dir
else:
raise Exception("readable_dir:{0} is not a readable dir".format(prospective_dir))
parser = argparse.ArgumentParser(description='test', fromfile_prefix_chars="@")
parser.add_argument('-l', '--launch_directory', type=readable_dir, default='/tmp/non_existent_dir')
args = parser.parse_args()
Mẫu mã hữu ích. Nâng cao nên 'nâng argparse.ArgumentTypeError', nhưng nếu không, tôi đang đào loại readable_dir. – mlissner