Maison  >  Questions et réponses  >  le corps du texte

python - détails de vidage et de lecture de la ligne

Il est normal d'exécuter log.py d'abord, puis follow.py (est-ce que quelque chose comme tail -f 的效果),但是先运行 follow.py 再运行 log.py 不可以,而且过通过 vi 在 access-log 最后添加类容,也不可以,是因为 flush 不写 ,readline 读到 ne peut pas continuer ? Quelle est la raison sous-jacente spécifique de ce problème ?

# 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 Il y a quelques jours813

répondre à tous(1)je répondrai

  • 曾经蜡笔没有小新

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

    Le problème est que votre log.py est écrit en utilisant w Si vous ouvrez d'abord follow.py, et thefile.seek(0,2) , alors son décalage doit être le dernier. Si votre access-log a 100 000 lignes et une longueur totale de 100 000 octets, alors la position du fichier ira à la position 100 000, mais votre log.py utilise w. Ce mode écrira depuis le début, donc jusqu'à ce que log.py soit écrit sur 100 000 octets, il sera en fait accepté par suivi. py et commencez à générer le nouveau contenu après la position 100000.
    Solution :
    Changez le mode d'écriture et utilisez APPEND pour ajouter l'écriture de modèle :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

    La raison pour laquelle il n'y a pas de sortie dans l'édition vim est que lorsque nous utilisons vim pour éditer un fichier, il est édité sur un fichier temporaire, pas sur un vrai fichier. Le nom du fichier temporaire est ".xxx. .swp" ( xxx représente le nom du fichier modifié)🎜

    répondre
    0
  • Annulerrépondre