我有一个由我的应用程序执行的python脚本。该脚本使用python内置的logging
API。我遇到的问题是所有日志消息中的文件名都写为<string>
。当我在一个片段中运行相同的代码时,它运行正常。
下面是我用来配置记录器的代码:
import logging
import os
import sys
from logging import FileHandler, StreamHandler
logger = logging.getLogger('update_menu')
logger.setLevel(logging.DEBUG)
# create handlers and set level to debug
fileHandler = FileHandler(filename='/home/fguimaraes/work/update_menu.log')
fileHandler.setLevel(logging.DEBUG)
consoleHandler = StreamHandler(stream=sys.stdout)
consoleHandler.setLevel(logging.DEBUG)
# create formatter
formatter = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s;File:%(filename)s;Function:%(funcName)s;Line:%(lineno)d')
# add formatter to log
fileHandler.setFormatter(formatter)
consoleHandler.setFormatter(formatter)
# add log to logger
logger.addHandler(fileHandler)
logger.addHandler(consoleHandler)
答案 0 :(得分:1)
这可能是因为您的脚本正被读入内存并使用例如字符串执行。 exec
,表示脚本没有文件名。例如:
$ cat /tmp/test.py
import logging
logging.basicConfig(level=logging.DEBUG, format='%(filename)s: %(message)s')
logging.debug('This is a test')
vinay@theta-trusty-unity:~/projects/orbitilweb$ python /tmp/test.py
test.py: This is a test
$ python
Python 2.7.6 (default, Oct 26 2016, 20:30:19)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> with open('/tmp/test.py') as f: data = f.read()
...
>>> exec data
<string>: This is a test
>>>
答案 1 :(得分:-1)
对于那些寻求解决方案的人,我遇到了同样的问题,我决定通过使用以下内容代替exec来解决它:
subprocess.call(['python', 'myscript.py'])