2010-06-19 25 views
9

Tôi đang cố gắng viết một chuỗi dài bằng Python được hiển thị dưới dạng mục trợ giúp của tùy chọn OptParser. Trong tệp .py mã nguồn của tôi, tôi muốn đặt dòng mới để mã của tôi không chi tiêu dòng mới. Tuy nhiên, tôi không muốn những dòng mới đó ảnh hưởng đến cách chuỗi được hiển thị khi mã được chạy. Ví dụ, tôi muốn viết:Trích dẫn các chuỗi dài không có dòng mới trong Python

parser.add_option("--my-option", dest="my_option", nargs=2, default=None, 
       help='''Here is a long description of my option. It does many things 
       but I want the shell to decide how to display this explanation. However, 
       I want newlines in this string.''') 

cách trên làm việc sẽ làm cho nó như vậy khi tôi gọi chương trình của tôi với --help, lời giải thích của tôi-option sẽ có nhiều khoảng trống trong đó.

Làm cách nào để khắc phục sự cố này?

cảm ơn.

Trả lời

18

Bạn có thể ghép xâu giống như trong C, vì vậy "foo" "bar" cũng giống như "foobar", có nghĩa là điều này sẽ làm những gì bạn muốn:

parser.add_option("--my-option", dest="my_option", nargs=2, default=None, 
      help="Here is a long description of my option. It does many things " 
      "but I want the shell to decide how to display this explanation. However, " 
      "I want newlines in this string.") 

Lưu ý rằng bạn không cần ký tự tiếp tục đường chéo ngược vì toàn bộ nội dung nằm trong dấu ngoặc đơn.

+1

Bạn vẫn cần dấu \ ở cuối dòng. –

+9

@Emil H: Không, bởi vì nó được đặt trong '()' như là một phần của tham số. –

+1

Tôi đã chỉnh sửa. –

1

này hoạt động:

foo = "abc" + \ 
    "def" + \ 
    "ghi" 

print foo 
+0

tôi có thể làm điều đó, nhưng điều đó có vẻ dài dòng ... có một bàn tay ngắn tiêu chuẩn cho việc này không? Về cơ bản tôi muốn một số đường cú pháp làm cho các chuỗi python xử lý như TeX, trong đó khoảng trống dòng mới không quan trọng. – user248237dfsf

9

Chỉ cần tận dụng lợi thế của chuỗi juxtaposition - trong Python, giống như trong C, nếu hai chuỗi ký tự bên cạnh nhau chỉ với khoảng trắng ở giữa (bao gồm cả dòng mới), trình biên dịch sẽ hợp nhất chúng thành chuỗi ký tự đơn, bỏ qua khoảng trắng. I.e .:

parser.add_option("--my-option", dest="my_option", nargs=2, default=None, 
        help='Here is a long description of my option. It does ' 
         'many things but I want the shell to decide how to ' 
         'display this explanation. However, I do NOT want ' 
         'newlines in this string.') 

Tôi giả định rằng "Tôi muốn" bạn thực sự có nghĩa là "Tôi KHÔNG muốn" ở đây ;-).

Lưu ý dấu cách ở cuối mỗi phần của chữ bạn đang đi ngang là help: bạn phải đặt chúng ở đó một cách rõ ràng, nếu không vị trí kề nhau sẽ tạo "từ" như doesmany và cứ thế ;-) .

Lưu ý rằng, rất khác với một số câu trả lời và nhận xét, bạn chắc chắn không cần dấu cộng, và dấu chéo ngược ở đây - không cần cộng thêm vì trình biên dịch áp dụng tính năng chèn cho bạn, không có dấu gạch chéo ngược cần thiết hoặc bởi vì tập hợp các dòng vật lý này là một dòng logic duy nhất (nhờ vào dấu ngoặc mở đang không được đóng cho tới khi kết thúc tập hợp các dòng vật lý!).

4

Mặc định giúp đỡ định dạng định dạng lại chuỗi, do đó bạn có thể sử dụng dòng mới trong chuỗi sự giúp đỡ như bạn muốn:

>>> from optparse import OptionParser 
>>> parser = OptionParser() 
>>> parser.add_option('--my-option', help='''aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
aaaaaaaaaaaaaaaaaaaaaaa 
... b 
... c       d 
... e 
... f''') 
>>> parser.print_help() 
Usage: bpython [options] 

Options: 
    -h, --help   show this help message and exit 
    --my-option=MY_OPTION 
         aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
         aaa b c       d e f 

Để loại bỏ bất kỳ không gian hàng đầu thông thường bạn có thể sử dụng textwrap.dedent:

>>> from optparse import OptionParser 
>>> from textwrap import dedent 
>>> parser = OptionParser() 
>>> parser.add_option('--my-option', help=dedent('''\ 
...  Here is a long description of my option. It does many things 
...  but I want the shell to decide how to display this 
...  explanation. However, I want newlines in this string.''')) 
>>> parser.print_help() 
Usage: [options] 

Options: 
    -h, --help   show this help message and exit 
    --my-option=MY_OPTION 
         Here is a long description of my option. It does many 
         things but I want the shell to decide how to display 
         this explanation. However, I want newlines in this 
         string. 
Các vấn đề liên quan