logger-Datei nicht finden kann
Bin ich immer diese Fehlermeldung wenn ich diesen Befehl Eingabe:
$ python3.4 cron_e2e.py -f test_web_events -E ctg-clickstream testbrad
Fehler:
$ python3.4 cron_e2e.py -f test_web_events -E ctg-clickstream testbrad
Traceback (most recent call last):
File "cron_e2e.py", line 421, in <module>
sys.exit(main(sys.argv))
File "cron_e2e.py", line 368, in main
log.addHandler(logging.FileHandler(logfile))
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/logging/__init__.py", line 1006, in __init__
StreamHandler.__init__(self, self._open())
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/logging/__init__.py", line 1030, in _open
return open(self.baseFilename, self.mode, encoding=self.encoding)
FileNotFoundError: [Errno 2] No such file or directory: '/Users/bli1/Development/QE/chun-qe-trinity-functional/qe/tests/qe/logs/testbrad_8_21_2015_cron.log'
Tritt der Fehler in dieser Zeile:
log.addHandler(logging.FileHandler(logfile))
Nicht ganz sicher, wo mein code, nicht das erstellen der log-Datei für mich
code:
def main(argv):
"Test"
exit_code = 0
global me; me = os.path.basename(argv[0]) # name of this program
global mydir; mydir = os.path.dirname(os.path.abspath(__file__))
parser = argparse.ArgumentParser(description=main.__doc__)
parser.add_argument("-f", "--functional_test", metavar="FUNCTEST",
dest="functest", help="Type of functional test")
parser.add_argument("-p","--phase", action="append",
metavar="POST|HDFS|HIVE|ALL", dest="phase",
help="phase of test to run")
parser.add_argument("-t", "--testfile", metavar="TESTFILE",
dest="testfile", default=os.path.join(mydir, "resources/cron.json"),
help="file with test commands")
parser.add_argument("-E","--Event", metavar="EVENTNAME",
dest="event_names", action="append",
help="[repeatable] topic to which to post")
parser.add_argument("runtag",
metavar="RUNTAG",
help="run tag for this run")
args = parser.parse_args(args=argv[1:]) # will exit on parse error
log = logging.getLogger(me)
log.setLevel(logging.INFO)
dt = datetime.datetime.utcnow()
logfile = "qe/logs/" + (args.runtag + "_{}_{}_{}".format(dt.month, dt.day, dt.year) + "_cron.log")
pdb.set_trace()
if isinstance(logfile, str):
if os.path.exists(logfile):
os.remove(logfile)
# logging.FileHandler() returns FileHandler class, the file is opened and used as the stream for logging
log.addHandler(logging.FileHandler(logfile))
console = logging.StreamHandler(sys.stderr); console.setLevel(logging.WARNING); log.addHandler(console)
- Und Sie sind sicher, dass der Pfad in der letzten Zeile der traceback existiert? Wollen Sie nicht haben
logfile = '../logs/' + .....
statt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Problem ist, dass das Verzeichnis, in dem Sie definiert die log-Datei zu gehen -
"qe/logs/"
- nicht vorhanden.Standardmäßig ist der Modus für
FileHandler
ist'a'
, was bedeutet, dass, wenn die Protokolldatei bereits vorhanden ist, öffnen Sie es und starten Sie das Anhängen am Ende, sonst würde es erstellen der Datei.Aber der FileHandler würde nur das erstellen der log-Datei, wenn es nicht existieren , wäre es nicht das Verzeichnis erstellen wenn nicht vorhanden aus, wenn das Verzeichnis nicht vorhanden ist, es würde einen Fehler auslösen, wie Sie bekam.
Würden Sie brauchen, um das Verzeichnis selbst , entweder manuell oder programmgesteuert. Wenn Sie möchten, erstellen Sie das Verzeichnis ein Programm, das Sie verwenden können -
os.makedirs()
- die würde -Beispiel -