2015-08-21 95 views
1

我得到這個錯誤,當我把這個輸入命令:記錄器無法找到文件

$ python3.4 cron_e2e.py -f test_web_events -E ctg-clickstream testbrad

錯誤:

$ 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' 

在此行中出現的錯誤:

log.addHandler(logging.FileHandler(logfile)) 

不太確定我的代碼在哪裏沒有爲我創建日誌文件

代碼:

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) 
+0

而且你確信在回溯的最後一行路徑是否存在?你不想要'logfile ='../logs/'+ .....'而不是? –

回答

4

的問題是,在其中定義了日誌文件進入目錄 - "qe/logs/" - 不存在。

默認情況下,FileHandler的模式爲'a',這意味着如果日誌文件存在,它會打開它並在最後開始附加到它,否則它會創建文件。

但FileHandler只會創建日誌文件,如果它不存在,它不會創建該目錄如果不存在,如果該目錄不存在,它會拋出一個像你一樣的錯誤。

您需要自己手動或編程創建目錄。如果你想以編程方式創建的目錄,你可以使用 - os.makedirs() - 這將 -

create all intermediate-level directories needed to contain the leaf directory.

示例 -

import os, os.path 
if not os.path.exists("qe/logs/"): 
    os.makedirs("qe/logs/")