2010-06-19 2 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

Вам все еще нужны \ знаки в конце строк. –

+9

@Emil H: Нет, потому что он заключен в '()' как часть параметров. –

+1

Я стою исправлены. –

1

Это работает:

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

print foo 
+0

я могу сделать что, но это кажется многословным ... есть ли стандартная короткая рука для этого? Я в основном хочу какой-то синтаксический сахар, который заставляет python обрабатывать строки, такие как TeX, где пустое значение строки не имеет значения. – user248237dfsf

9

Просто воспользоваться строковым литералом сопоставления - в Python, как и в C, если две строковых литералов рядом друг с другом только с пробелами в-между (включая переводы строк), компилятор будет объединить их в однострочный литерал, игнорирующий пробелы. Т.е .:

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. 
Смежные вопросы