python - siram dan butiran baris baca
我想大声告诉你
我想大声告诉你 2017-05-18 10:48:31
0
1
772

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,
我想大声告诉你
我想大声告诉你

membalas semua(1)
曾经蜡笔没有小新

Masalahnya ialah log.py anda ditulis menggunakan w Jika anda membuka follow.py dahulu dan thefile.seek(0,2) code>, 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)🎜
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!