Rumah  >  Soal Jawab  >  teks badan

python - siram dan butiran baris baca

Adalah perkara biasa untuk menjalankan log.py dahulu dan kemudian ikuti.py (bolehkah sesuatu seperti tail -f 的效果),但是先运行 follow.py 再运行 log.py 不可以,而且过通过 vi 在 access-log 最后添加类容,也不可以,是因为 flush 不写 ,readline 读到 tidak diteruskan? Apakah sebab asas khusus untuk masalah ini?

# log.py
 
f = open("access-log","w")

import time, random
while True:
    time.sleep(random.random())
    n = random.randint(0,len(ips)-1)
    m = random.randint(0,len(docs)-1)
    t = time.time()
    date = time.strftime("[%d/%b/%Y:%H:%M:%S -0600]",time.localtime(t))
    print >>f,"%s - - %s %s" % (ips[n],date,docs[m])
    f.flush()
# follow.py

import time
def follow(thefile):
    thefile.seek(0,2)      # Go to the end of the file
    while True:
         line = thefile.readline()
         if not line:
             time.sleep(0.1)    # Sleep briefly
             continue
         yield line

# Example use
if __name__ == '__main__':
    logfile = open("access-log")
    for line in follow(logfile):
        print line,
我想大声告诉你我想大声告诉你2732 hari yang lalu812

membalas semua(1)saya akan balas

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-18 10:50:31

    Masalahnya ialah log.py anda ditulis menggunakan w Jika anda membuka follow.py dahulu dan thefile.seek(0,2) , maka offsetnya mestilah yang terakhir Jika access-log anda mempunyai 100,000 baris dan panjang keseluruhan 100,000 bait, maka kedudukan fail akan pergi ke kedudukan 100000, tetapi log.py menggunakan w Mod ini akan ditulis dari awal, jadi sehingga log.py ditulis kepada 100000 Bytes sebenarnya akan diterima oleh follow. py dan mula mengeluarkan kandungan baharu selepas kedudukan 100000.
    Penyelesaian:
    Tukar mod penulisan dan gunakan APPEND
    untuk menambahkan Tulisan Corak:log.py写得模式用了w, 如果你先打开follow.py, 并且thefile.seek(0,2), 那么它的偏移量肯定是最后的, 如果你的access-log有十万行, 总长度为100000字节, 那么thefile的位置就会去到第100000位置, 但是你的log.py却用了w, 这个模式会从头开始写, 所以直到log.py写到100000字节, 才会真正被follow.py接受到, 并且开始输出从100000位置后新增的内容.
    解决办法:
    换种写模式, 用APPEND追加的模式写:

    f = open("access-log","a+")

    vim rrreee

    Sebab mengapa tiada output dalam pengeditan vim ialah apabila kami menggunakan vim untuk mengedit fail, ia diedit pada fail sementara, bukan fail sebenar Nama fail sementara ialah ".xxx .swp" ( xxx mewakili nama fail yang diedit)🎜

    balas
    0
  • Batalbalas