Diciamo che ho uno script che funziona su un file. Prende il nome di questo file sulla riga di comando, ma se non viene fornito, il valore predefinito è un nome file noto (content.txt
, ad esempio). Con pitone di argparse
, io uso il seguente:Specificare i nomi file predefiniti con argparse, ma non aprirli su --help?
parser = argparse.ArgumentParser(description='my illustrative example')
parser.add_argument('--content', metavar='file',
default='content.txt', type=argparse.FileType('r'),
help='file to process (defaults to content.txt)')
args = parser.parse_args()
# do some work on args.content, which is a file-like object
Questa grande opera. L'unico problema è che se corro python myscript --help
, ottengo un ArgumentError
se il file non è lì (che immagino abbia senso), e il testo di aiuto non viene mostrato. Preferisco non provare ad aprire il file se l'utente vuole solo --help
. C'è un modo per fare questo? So che potrei fare l'argomento una stringa e prendersi cura di apertura del file stesso più tardi (e ho fatto quello), ma sarebbe conveniente avere argparse
prendersi cura di esso.
Beh, sembra che si dovrà prendere una decisione qui. Puoi rendere disponibile il file predefinito (in quanto è un 'default') o semplicemente aprire il file te stesso, come hai suggerito tu stesso. In alternativa, sembra che tu possa usare lo stdin come predefinito, tuttavia non sarai in grado di specificare un nome di file predefinito, che potrebbe non essere una cattiva opzione se non vuoi popolare quel file. –