2013-04-10 30 views
4

如何自動換行長python字符串以便它們正確打印?正確包裝長python字符串以進行optparse

具體而言,我想添加幫助字符串optparse,我想能夠輕鬆修改。

我已經找到了解決長字符串,其中沒有一個讓我做在Emacs使用MQ或類似的改變後補充的幾種方法:在結果

p.add_option('-a', help = "this is my\ 
          long help text") 

力換行和不允許回填

p.add_option('-a', help = "this is my " 
          "long help text") 

格式正確,但不允許補充

p.add_option('-a', help = ''' 
      this is my 
      long help text 
      ''') 

格式不正確,但允許補充

p.add_option('-a', help = dedent(''' 
      this is my 
      long help text 
      ''')) 

是我已經找到了最好的選擇,格式幾乎正確,允許在字符串的開頭補充,但會導致額外的空間。

+0

什麼是''refilling''..我不熟悉它。 – mgilson 2013-04-10 14:18:02

+0

我不確定術語是否完美,我只是指在編輯之前填充已填充的文本,我從[填充模式](http://www.emacswiki.org/emacs/RefillMode) 。 – kaveish 2013-04-10 14:23:45

+0

是的,但「填充文本」是什麼意思? – mgilson 2013-04-10 14:25:01

回答

1

如果您使用Python> = 2.7,請使用argparse而不是optparse。它爲你做了dedent。你可以這樣做:

parser.add_argument('--argument', '-a', help=''' 
    this is my 
    long help text 
    ''') 

即使你使用Python 2.7 <,你可以從PyPI中argparse安裝。

請注意,有一種方法可以抑制此自動縮進行爲。 @msw給出的鏈接實際上是關於它的部分。

+0

這是完美的!我不知道optparse已被棄用。在幫助輸出中也有更好的格式。 – kaveish 2013-04-11 12:03:28

2

docs use dedent所以它似乎是合理的,特別是如果它的工作。如果你要刪除的領先的空間你可以:

help = dedent(''' 
      this is my 
      long help text 
      ''')[1:] 

雖然

dedent(…).lstrip() 

可能會更加明顯。

+0

太棒了,這個功能非常好。從鏈接我現在使用''''''之後的'''''而不是'[1:]'',它給出了相同的結果。 – kaveish 2013-04-10 16:49:35

1

我不是100%肯定是什麼回填,但這裏是我通常使用:

p.add_option('-a', help = ("this is my " 
          "long help text")) 

(注意額外的括號)。 Emacs爲我排列了前一個左括號。

+0

+1也是一個很好的方法 – msw 2013-04-10 14:22:39

+0

我喜歡emacs使用這種方法對Tab對齊進行排序,不幸的是它仍然不能用M-q填充。 – kaveish 2013-04-10 14:36:30

相關問題