请选择 进入手机版|继续访问电脑版
发新帖

Python 的命令行程序时间久了打 log 就会弹异常

[复制链接]
4562 10

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
环境为 docker for win10,出异常的地方:
fn = self.logDir + "/%d-%s-%s.log" % (self.no, level, cate)            file_object = open(fn, 'a')            file_object.write(logLine)            file_object.close()异常为:
Traceback (most recent call last):  File "/app/src/master.py", line 160, in   File "/app/src/master.py", line 155, in run  File "/app/src/utils.py", line 133, in logIOError: [Errno 5] Input/output error: '/app/var/log/0-warning-.log'dockerfile 为:
FROM centos:6RUN yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm && \yum -y install https://centos6.iuscommunity.org/ius-release.rpm  && \yum -y install htop \         iftop \        git2u \        vixie-cron \        openssh-server \        strace \    python27 \    python27-pip && \yum clean allRUN ( echo "root";sleep 1;echo "root" ) | passwdRUN git config --global credential.helper storeENV IMAGE_VER 0.3RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \    && echo 'Asia/Shanghai' > /etc/timezone#不用 requirements.txt 而是分开安装在 docker 更快#2.10.6RUN pip2.7 install redis  -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com#2.18.4RUN pip2.7 install requests -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com#4.6.0RUN pip2.7 install BS4 -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com#0.1.7RUN pip2.7 install pytesseract -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com#3.5.0RUN pip2.7 install ConfigParser  -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com#3.8.0RUN pip2.7 install selenium  -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.comCMD service crond start && service sshd start && /bin/bash

举报 使用道具

回复

精彩评论10

gouchaoer  注册会员  发表于 2018-1-25 04:02:30 | 显示全部楼层
实在搜不到解决方案,不知道啥原因导致的

举报 使用道具

回复
gouchaoer  注册会员  发表于 2018-1-25 05:21:09 | 显示全部楼层
不止那个"/app/var/log/0-warning-.log"文件不能写,连别的文件也不能写:
```
Exception IOError: (5, 'Input/output error', '/app/var/log/0-info-.log') in <bound method Master.__del__ of <__main__.Master object at 0x7f6f7aa9b8d0>> ignored
```
我有点怀疑是因为我把 win 下的源码映射到 docker 容器的 /app 路径下,docker 容器是这么做的:
```
docker create -it --name test -v C:/Users/path/to/test:/app -p 23333:22 --cap-add SYS_PTRACE test:0.1
```

举报 使用道具

回复
gouchaoer  注册会员  发表于 2018-1-25 23:29:31 | 显示全部楼层
可是事后在 docker 容器里用 vim 也可以打开编辑那些 log 文件啊,比较迷

举报 使用道具

回复
gouchaoer  注册会员  发表于 2018-1-26 03:50:00 | 显示全部楼层
也没有别的程序以写或者读打开那些 log 文件

举报 使用道具

回复
ipwx  新手上路  发表于 2018-1-26 14:11:16 | 显示全部楼层
看看文件句柄数量是不是超过了当前进程的限制数量。

https://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/

- - - -

每写一行打开一次文件不是好的 practice。请用 logging 模块。

举报 使用道具

回复
marcoqin  新手上路  发表于 2018-1-26 19:52:07 | 显示全部楼层
请用 logging 模块 +1

举报 使用道具

回复
shazoo  新手上路  发表于 2018-1-28 06:03:16 | 显示全部楼层
IOError: [Errno 5] Input/output error: '/app/var/log/0-warning-.log'

估计是 cate 参数为空导致的?感觉不是大问题。

举报 使用道具

回复
yeyuexia  新手上路  发表于 2018-1-28 09:17:05 | 显示全部楼层
lz 是不是在程序里开了多线程 /多进程啊  总觉得有点像是写冲突的样子……所以还是老老实实用 logging 吧……

举报 使用道具

回复
gouchaoer  注册会员  发表于 2018-1-28 16:17:03 | 显示全部楼层
这和 logging 模块无关啊,我只是觉得它太弱了我自己定制了一个,然后打开文件又写了点东西而已,那是个合法的文件名
@ipwx lsof -n | grep 5950 -c 查出句柄一直是 59,没有泄漏啥的

举报 使用道具

回复
gouchaoer  注册会员  发表于 2018-1-28 20:19:40 | 显示全部楼层
总之先这样,多谢各位了:
```
            #https://www.v2ex.com/t/425463
            try:
                fn = self.logDir + "/%d-%s-%s.log" % (self.no, level, cate)
                file_object = open(fn, 'a')
                file_object.write(logLine)
                file_object.close()
                fn = self.logDir + "/%d.log" % (self.no)
                file_object = open(fn, 'a')
                file_object.write(logLine)
                file_object.close()
            except Exception, e:
                sys.stdout.write(e.message())
```

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表