2010-06-19 51 views
9

我想在Python中編寫一個長字符串,該字符串作爲OptParser選項的幫助項目顯示。在我的源代碼.py文件中,我想放置換行符,以便我的代碼不會花費新行。但是,我不希望這些換行符影響代碼運行時該字符串的顯示方式。例如,我想寫:在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.''') 

做的事情將使它所以當我把我的計劃與--help上述方式,我的選項的說明將有它的許多空白。

我該如何解決這個問題?

謝謝。

回答

18

您可以連接字符串常量,就像在C,所以"foo" "bar"是一樣的"foobar",這意味着這應該做你想要什麼:

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.") 

請注意,您不需要反斜槓連續字符,因爲整個事物都在括號內。

+1

你仍然需要\行尾的符號。 – 2010-06-19 19:53:32

+9

@Emil H:不,因爲它被包含在'()'中作爲參數的一部分。 – 2010-06-19 19:55:32

+1

我站好了。 – 2010-06-19 19:56:30

1

這工作:

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

print foo 
+0

我可以做那,但似乎冗長......這是否有一個標準的短手?我基本上想要一些使python像TeX那樣處理字符串的語法糖,換行符空白無關緊要。 – user248237dfsf 2010-06-19 19:50:26

9

只是利用字符串字面並列的 - 在Python和C一樣,如果兩個字符串文字是在中間只是空格(包括換行符)彼此相鄰,編譯器將它們合併成一個單個字符串文字,忽略空白。 I .: .:

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.') 

我假設「我想要」你實際上是指「我不想」在這裏;-)。

請注意,您傳遞的每個文字末尾的尾部空格爲help:您必須將它們明確地放在那裏,否則並列會使「文字」如doesmany等等;-) 。

需要注意的是,從非常不同的東西一些答案和意見要求,你最肯定需要難看的,冗餘的長處和-或反斜槓這裏 - 無需加號,因爲編譯器爲你應用並列,沒有反斜槓或者是因爲這組物理線路是一條邏輯線路(感謝直到物理線路集合結束時開放的線路尚未關閉)。

4

默認幫助格式化重新格式化字符串,這樣你就可以隨意使用換行符在幫助字符串:

>>> 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 

要刪除,你可以使用任何常用的前導空格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.