Tôi đã gặp sự cố tương tự (Python 2.7.6). Tôi đã cố gắng để phá vỡ mô tả phần thành nhiều dòng sử dụng RawTextHelpFormatter
:
parser = ArgumentParser(description="""First paragraph
Second paragraph
Third paragraph""",
usage='%(prog)s [OPTIONS]',
formatter_class=RawTextHelpFormatter)
options = parser.parse_args()
Và có:
usage: play-with-argparse.py [OPTIONS]
First paragraph
Second paragraph
Third paragraph
optional arguments:
-h, --help show this help message and exit
Vì vậy RawTextHelpFormatter
không phải là một giải pháp. Bởi vì nó in mô tả khi nó xuất hiện trong mã nguồn, bảo toàn tất cả các ký tự khoảng trắng (tôi muốn giữ các tab phụ trong mã nguồn của tôi để dễ đọc nhưng tôi không muốn in tất cả. Ngoài ra định dạng thô không bọc dòng khi nó được quá dài, hơn 80 ký tự chẳng hạn).
Nhờ @Anton đã truyền cảm hứng đúng hướng above. Nhưng giải pháp đó cần sửa đổi nhỏ để định dạng mô tả phần.
Dù sao, định dạng tùy chỉnh là cần thiết. Tôi mở rộng HelpFormatter
lớp hiện có và gạt _fill_text
phương pháp như thế này:
import textwrap as _textwrap
class MultilineFormatter(argparse.HelpFormatter):
def _fill_text(self, text, width, indent):
text = self._whitespace_matcher.sub(' ', text).strip()
paragraphs = text.split('|n ')
multiline_text = ''
for paragraph in paragraphs:
formatted_paragraph = _textwrap.fill(paragraph, width, initial_indent=indent, subsequent_indent=indent) + '\n\n'
multiline_text = multiline_text + formatted_paragraph
return multiline_text
Hãy so sánh với mã nguồn gốc đến từ argparse mô-đun:
def _fill_text(self, text, width, indent):
text = self._whitespace_matcher.sub(' ', text).strip()
return _textwrap.fill(text, width, initial_indent=indent,
subsequent_indent=indent)
Trong đoạn mã gốc toàn bộ mô tả đang được bao bọc.Trong trình định dạng tùy chỉnh phía trên toàn bộ văn bản được chia thành nhiều phần và mỗi phần được định dạng độc lập.
Vì vậy, với trợ giúp của định dạng tùy chỉnh:
parser = ArgumentParser(description= """First paragraph
|n
Second paragraph
|n
Third paragraph""",
usage='%(prog)s [OPTIONS]',
formatter_class=MultilineFormatter)
options = parser.parse_args()
đầu ra là:
usage: play-with-argparse.py [OPTIONS]
First paragraph
Second paragraph
Third paragraph
optional arguments:
-h, --help show this help message and exit
Tôi không có python 2.7 với tôi để tôi có thể kiểm tra ý tưởng của mình. Cách sử dụng văn bản trợ giúp trong dấu ngoặc kép ("" "" ""). Do các dòng mới tồn tại bằng cách sử dụng này? – pyfunc
@pyfunc: Không. Tước được thực hiện trong thời gian chạy bởi 'argparse', không phải là trình thông dịch, vì vậy việc chuyển sang' "" "..." "" 'sẽ không giúp ích gì. – kennytm