5

Attualmente ho un file python che utilizza sys.argv [1] per accettare una stringa sulla riga di comando. Quindi esegue operazioni su quella stringa e quindi restituisce la stringa modificata alla riga di comando.La maggior parte dei modi pietonici di accettare argomenti usando optparse

vorrei implementare un'opzione modalità batch in cui posso fornire un file di stringhe (uno per riga, FWIW) e lo hanno tornare alla riga di comando in modo che possa reindirizzare l'output facendo qualcosa di simile

$ python script.py -someflag file.txt > modified.txt 

mantenendo le attuali capacità.

Sto solo eseguendo 2.6, quindi argparse non è un'opzione. Le esercitazioni che ho visto utilizzano o argparse, getopt o approfondiscono esempi troppo complessi/non applicabili.

Qual è il modo migliore per verificare l'input e agire in modo appropriato?

+1

argparse è ancora un'opzione , non è integrato nel 2.6. È ancora possibile installarlo come qualsiasi pacchetto di terze parti (ad esempio, 'install gupparse'). –

risposta

6

argparse è ancora un'opzione, non è integrato nel 2.6. È ancora possibile installarlo come qualsiasi pacchetto di terze parti (ad esempio, utilizzando easy_install argparse).

Un esempio di codice per questo sarebbe:

import sys 
import argparse 

p = argparse.ArgumentParser(description="script.py") 
p.add_argument("-s", dest="string") 
p.add_argument("-f", dest="infile") 

args = p.parse_args() 

if args.infile == None and args.string == None: 
    print "Must be given either a string or a file" 
    sys.exit(1) 
if args.infile != None and args.string != None: 
    print "Must be given either a string or a file, not both" 
    sys.exit(1) 
if args.infile: 
    # process the input file one string at a time 
if args.string: 
    # process the single string 
+0

Grazie! Non sapevo che Argparse era di terze parti prima di 2.7 e il codice è un ulteriore vantaggio. Lo accetterò probabilmente non appena avrò la possibilità di provarlo :) – verbsintransit

+0

Sei il benvenuto. argparse è uno strumento molto potente e intuitivo e lo consiglio vivamente. –

+1

Quando si verifica contro 'None', è più pitioso usare' is' e 'is not' per verificare quel valore:' if args.infile è None e args.string è None: 'e' se args.infile è non None e args.string non è None: '. –

3

Vedere la mia risposta qui: What's the best way to grab/parse command line arguments passed to a Python script?

Come scorciatoia, ecco alcuni esempi di codice:

import optparse 

parser = optparse.OptionParser() 

parser.add_option('-q', '--query', 
    action="store", dest="query", 
    help="query string", default="spam") 

options, args = parser.parse_args() 

print 'Query string:', options.query 
+0

** Nota **: l'uso di * optparse * è sconsigliato da python versione 2.7. Il modulo optparse è deprecato e non verrà ulteriormente sviluppato; lo sviluppo continuerà con il modulo * argparse *. Vedi [PEP 0389] (http://www.python.org/dev/peps/pep-0389/) per maggiori informazioni. – shakaran