2016-09-05 3 views
0

Ich benutze das Modul argparse und ich habe eine Protokolldatei, an die kontinuierlich angehängt wird. Ich möchte args.file öffnen, etwas mit dem Inhalt machen, dann schließen und nach einiger Zeit wieder öffnen.Argarse Datei erneut öffnen.

Ein Beispiel Stück Code:

import argparse 
import time 
parser = argparse.ArgumentParser() 
parser.add_argument('file',type=file) 
args = parser.parse_args() 

for _ in range(3): 
    data = args.file.read() 
    print data 
    time.sleep(3) 

Beachten Sie, dass keine Lösung args.file.seek (0) hier ist. Ich kann die Datei mit args.file.close() schließen, aber wie man es wieder öffnet?

Ich kann das Dateiname-Argument nur eine normale Zeichenfolge des Dateinamens machen, aber ich würde gerne eine Lösung kennen, die den Argumenttyp als Dateinamen behält.

+0

Ich denke, mit dem String-Typ und das Öffnen der Datei jedes Mal ist sauberer. –

Antwort

1
parser.add_argument('file',type=file) 

bedeuten verwenden, nicht, the argument is to be a file. Es bedeutet

value = file(astring) 
args.file = value 

Die type Parameter eine Funktion ist, die an einer Schnur arbeitet. In Python3 wurde file entfernt; die äquivalent wäre:

parser.add_argument('file',type=open) 

Es gibt eine argparse.FileType Klasse ist als eine Datei zu öffnen, mit einem definierten Modus verwendet werden; Es erkennt auch den - Wert. Dies kann in kleinen Skripten hilfreich sein, die eine Eingabe und Ausgabe benötigen und sonst wenig tun. Aber im Allgemeinen ist es besser, die Datei selbst zu öffnen, vorzugsweise in einem with Kontext, also stellen Sie sicher, dass es geschlossen ist, wenn es nicht mehr verwendet wird.

parser.add_argument('file_name') 
args = parser.parse_args() 

for _ in range(3): 
    with open(args.file_name) as f: 
     data = f.read() 
    print data 
    time.sleep(3) 

Was Filetype für Sie tut, ist eine ‚nette‘ argparse Fehlermeldung geben, wenn die Datei nicht geöffnet werden kann. Zum Beispiel, wenn der Name in der Befehlszeile falsch eingegeben wurde.

0

können Sie es wieder öffnen

args.file = open(args.file.name) 
Verwandte Themen