python3.x - python 脚本linux 运行
迷茫
迷茫 2017-04-17 16:55:03
[Linux讨论组]

我想让一个写日志的脚本在后台运行,即使我关闭终端;
但是测试中我是用了python generate_log.py 是可以正常写入文件的,
但是当我使用了nohup python generate_log.py 日志文件一直是空
nohup python generate_log.py & 也是空的
nohup python -u generate_log.py & 也是空的
python generate_log.py & 也是空
我是用ps -ef 查看了进程是一直存在的
这是我的源码:

# coding:utf-8
from datetime import *
import time



def produce_log():
    a = datetime.now()
    a=str(a)
    log="""{0}-POST /kibana/elasticsearch/_msearch?timeout=30000&ignore_unavailable=true&preference=1447070343481 HTTP/1.1" 200 8352 "https://app.logz.io/kibana/index.html" "Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/45.0.2454.101 Chrome/45.0.2454.101 Safari/537.36" 0.465 0.454""".format(a)
    with open('test.log', 'a+') as file:
            for i in range(100000):
                file.write(a)
                file.write('\n')
                time.sleep(60)


if __name__ == '__main__':
    for k in range(33):
        produce_log()
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
迷茫
# coding:utf-8
import datetime
import time
import sys


def produce_log():
    """
    这个方法是有问题的可能跟buffer 有关系
    :return: 
    """
    with open('test.log', mode='a+') as file:
            for i in range(10):
                a = datetime.datetime.now()
                a = str(a)
                log = """POST /kibana/elasticsearch/_msearch?timeout=30000&ignore_unavailable=true&preference=1447070343481 HTTP/1.1" 200 8352 "https://app.logz.io/kibana/index.html" "Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/45.0.2454.101 Chrome/45.0.2454.101 Safari/537.36" 0.465 0.454"""
                file.write(log)
                file.write('\n')
                sys.stdout.flush()
                time.sleep(10)


def success():
    """
    这样写是没有问题的
    :return: 
    """
    log = """POST /kibana/elasticsearch/_msearch?timeout=30000&ignore_unavailable=true&preference=1447070343481 HTTP/1.1" 200 8352 "https://app.logz.io/kibana/index.html" "Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/45.0.2454.101 Chrome/45.0.2454.101 Safari/537.36" 0.465 0.454"""
    for i in range(10):
        with open('test.log','a+') as file:
            a=datetime.datetime.now()
            file.write(str(a)+log)
            file.write('\n')
        time.sleep(5)




if __name__ == '__main__':
    success()
高洛峰

由于write方法并不直接将数据写入文件,而是先写入内存中特定的缓冲区。当缓冲区满了之后才把内容写到磁盘上。
time.sleep之前调用flush()把缓冲区的内容刷写到磁盘上

...
file.write(a)
file.write('\n')
file.flush()
time.sleep(60)
...
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号