2015-04-13 10 views
6

Sto utilizzando argparse in Python2.7 e vorrei visualizzare più righe nel testo di aiuto di un argomento.Visualizzazione di più righe in python argparse help

miei codici di simile a questa:

import argparse 

parser = argparse.ArgumentParser(description='details', 
     usage='use "%(prog)s --help" for more information') 

parser.add_argument('--argument', default=None, type=sometype, 
     help=''' 
      First line \n 
      Second line \n 
      \n 
      More lines \n 
      ''') 

Vorrei che per stampare il messaggio di aiuto in più righe quando si chiama --help. Tuttavia, l'output appare come segue.

First line Second line More lines 

So che potrei risolvere il problema sommando le stringhe di ogni riga.

parser.add_argument('--argument', default=None, type=sometype, 
     help='First line \n' + 
      'Second line \n' + 
      '\n'    + 
      'More lines') 

Ma ci sono decine di righe che voglio aggiungere al testo di aiuto. Mi stavo chiedendo c'è un modo conveniente di dividere il testo di aiuto in più righe?

E inoltre, sembra che ci sia un limite superiore del numero di caratteri che possono essere visualizzati in una riga nel messaggio di aiuto, che è 54 nel mio caso. Questo limite è dipendente dal sistema e c'è un modo per aumentare il limite superiore?

+1

Argparse cancella di proposito i newline in quanto gestisce il riverbero del testo in base alle dimensioni del terminale. –

+0

Vedo, quindi il limite superiore per il numero di caratteri in ogni riga dipende dal sistema. –

+0

Possibile duplicato di [Python argparse: Come inserire newline nel testo della guida?] (Http://stackoverflow.com/questions/3853722/python-argparse-how-to-insert-newline-in-the-help-text) –

risposta

9

l'aiuto di default linee formattatore ri-si dispone di soddisfare il vostro terminale (sembra nella variabile di ambiente COLUMNS per determinare la larghezza di output, con un totale predefinito di 80 caratteri).

Dal formatter_class section:

Per impostazione predefinita, ArgumentParser oggetti line-avvolgono la descrizione e testi epilogo nei messaggi di aiuto della riga di comando.

utilizzare la classe RawTextHelpFormatter invece per indicare che è già avvolto le righe:

RawTextHelpFormatter mantiene gli spazi bianchi per ogni sorta di testo di aiuto, comprese le descrizioni degli argomenti.

Per il vostro codice che sembrerei:

parser = argparse.ArgumentParser(description='details', 
     usage='use "%(prog)s --help" for more information', 
     formatter_class=argparse.RawTextHelpFormatter) 

Fate attenzione di non aggiungere troppi a capo; le stringhe con quotatura tripla includono le newline che si lasciano nella stringa. Come tale non è necessario i \n personaggi:

>>> import argparse 
>>> parser = argparse.ArgumentParser(description='details', 
...   usage='use "%(prog)s --help" for more information', 
...   formatter_class=argparse.RawTextHelpFormatter) 
>>> parser.add_argument('--argument', default=None, 
...   help=''' 
...    First line 
...    Second line 
... 
...    More lines 
...    ''') 
_StoreAction(option_strings=['--argument'], dest='argument', nargs=None, const=None, default=None, type=None, choices=None, help='\n    First line\n    Second line\n\n    More lines\n    ', metavar=None) 
>>> parser.print_help() 
usage: use " --help" for more information 

details 

optional arguments: 
    -h, --help   show this help message and exit 
    --argument ARGUMENT 
            First line 
            Second line 

            More lines 
+0

RawTextHelpFormatter funziona! :) –

-2

La cosa più semplice che si possa fare sarebbe quella di inserire le righe in un array e poi unirsi a loro con a capo in questo modo:

help_lines = ['First line', 'Second line', '', 'More lines'] 
# ... 
parser.add_argument('--argument', default=None, type=sometype, 
help='\n'.join(help_lines)) 
+5

Ciò risulta ancora nello * stesso valore di stringa *. Questo perché i newline vengono deliberatamente rimossi dal programma di formattazione della guida. –

5

Un altro modo semplice per farlo è quello di includere textwrap.

Ad esempio,

import argparse, textwrap 
parser = argparse.ArgumentParser(description='Prepare input file', 
     usage='use "python %(prog)s --help" for more information', 
     formatter_class=argparse.RawTextHelpFormatter) 

parser.add_argument('--argument', default=somedefault, type=sometype, 
     help= textwrap.dedent('''\ 
     First line 
     Second line 
     More lines ... 
     ''')) 

In questo modo, si può evitare un lungo spazio vuoto davanti ciascuna linea di uscita.

usage: use "python your_python_program.py --help" for more information 

Prepare input file 

optional arguments: 
-h, --help   show this help message and exit 
--argument ARGUMENT 
         First line 
         Second line 
         More lines ... 
Problemi correlati