首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >contextmanager在日志记录中失败

contextmanager在日志记录中失败
EN

Stack Overflow用户
提问于 2014-11-10 16:00:57
回答 1查看 350关注 0票数 0

我试图编写一个锁功能,使我的脚本只有一个实例同时运行。但是,当我将调试消息或其他函数添加到代码中时,contextmanager并不喜欢。

有什么想法可以解决这个问题,用相同的功能和日志消息吗?

锁功能:

代码语言:javascript
复制
@contextmanager
def lockfile(lock_file='/run/lock/my_script.lock'):
    if os.path.exists(lock_file):
        logging.INFO('Found lock file with pid')
        lf = open(lock_file)
        pid = lf.readline()

        try:
            os.kill(pid, 0)
        except OSError:
            logging.INFO('Removing stale lock file')
            os.remove(lock_file)
        else:
            logging.INFO('Process still running. Aborting')
            sys.exit(1)

    if not os.path.exists(lock_file):
        pid = os.getpid()
        open(lock_file, 'w').write(pid)
        try:
            yield
        finally:
            os.remove(lock_file)

呼叫功能

代码语言:javascript
复制
with lockfile():
    do something

回溯:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/home/vagrant/.pycharm_helpers/pydev/pydevd.py", line 1733, in <module>
    debugger.run(setup['file'], None, None)
  File "/home/vagrant/.pycharm_helpers/pydev/pydevd.py", line 1226, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "/vagrant/my_script", line 274, in <module>
    with lockfile():
  File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__
    return self.gen.next()
  File "/vagrant/my_script", line 56, in lockfile
    logging.INFO('Found lock file with pid')
TypeError: 'int' object is not callable
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-10 16:03:28

logging.INFO不是一个函数。它是一个int对象,它表示不可调用的日志记录级别。

您可能想要使用logging.info代替。

代码语言:javascript
复制
...
logging.info('Removing stale lock file')

...
logging.info('Process still running. Aborting')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26847788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档