Mi piace il modulo argparse
. argparse.FileType
è utile anche se non si desidera che il valore predefinito sia diverso da sys.std*
poiché viene creato il file di output predefinito anche se si fornisce un valore .Come arrestare argparse.FileType creando il file specificato come predefinito
Ad esempio:
parser.add_argument('--outfile', type=FileType('w'), default="out.txt")
creerà out.txt anche se si specifica un file con --outfile.
Il meglio che posso venire in mente è:
class MagicFileType(object):
def __init__(self, *args, **kwargs):
# save args/kwargs and set filetype to None
self.filetype = None
self.args = args
self.kwargs = kwargs
def __getattr__(self, attr):
""" Delegate everything to the filetype """
# If we haven't created it, now is the time to do so
if self.filetype is None:
self.filetype = FileType(*self.args, **self.kwargs)
self.filetype = self.filetype(self.filename)
return getattr(self.filetype, attr)
def __call__(self, filename):
""" Just cache the filename """
# This is called when the default is created
# Just cache the filename for now.
self.filename = filename
return self
Ma se si sente come questo dovrebbe essere più facile, mi sto perdendo qualcosa?
Mentre mi piace molto la tua domanda e la soluzione, non riesco a riprodurre questo. Ho fatto un piccolo esempio e, quando specifico '--outfile', ottengo solo il file che ho specificato, non entrambi. In che versione di pitone sei? Forse è un bug nel modulo 'argparse' per una certa versione. Sono al 2.7.5 – Brian
È interessante, @ Brian. [Questo programma] (http://ideone.com/gC9F0t) asserisce sulla mia installazione 2.7.3 e sul mio 3.2.3. –
possibile duplicato di [specificare nomi file predefiniti con argparse, ma non aprirli su --help?] (Http://stackoverflow.com/questions/8236954/specifying-default-filenames-with-argparse-but-not-opening- it-on-help) –