2010-11-02 2 views
5

J'ai un fichier journal et je veux créer une page web (peut-être Python mais pas strictement) qui fonctionnera un peu comme la commande unix "queue -f nom_fichier" (affiche de nouvelles lignes quand elles sont écrites dans un fichier).Implémentation Web de "queue -f filename"?

Ainsi, l'utilisateur verra continuellement le journal directement dans le navigateur.

Comment implémenteriez-vous cela?

Répondre

0

Vous lisez le fichier et imprimez les dernières lignes de la page. Vous pouvez également utiliser une variable GET pour définir le nombre de lignes à sortir en utilisant? N = x où x est le nombre de lignes.

+0

Comment le faire fonctionner automatiquement? –

8

Tailon est une webapp python qui, entre autres choses, fournit tail -f comme fonctionnalité. En outre, wtee (un projet sœur de tailon) peut faire toute sa stdin visible dans le navigateur - son utilisation est identique à la commande unix tee:

+0

essayez aussi http://rtail.org et https://github.com/mthenw/frontail – Synox

0

Je mis en œuvre ce en utilisant jquery (.ajax) et php (JSON) .

Le flux est essentiellement comme suit:

    utilisateur
  • appelle une page html sur leur navigateur
  • page html contient un jquery initial .ajax appel à un script php à distance sur le serveur qui exécute le nécessaire fonction, dans ce cas, récupérer quelques-unes des dernières lignes du fichier étant 'tailed'
  • si aucune nouvelle ligne n'est disponible, le script php boucle juste (wile l'appelant ajax attend, ie longpolling), et peut être configuré pour expirer si nécessaire (retour d'une valeur appropriée à la fonction d'appel ajax o Lorsque le nouveau script php détecte de nouvelles lignes, celles-ci sont enveloppées dans une réponse json et renvoyées à la fonction d'appel ajax du navigateur, qui l'ajoute ensuite au contenu existant de la page.
  • La fonction javascript effectuera alors récursivement le même appel ajax, s'asseyant effectivement dans une boucle infinie.

Dans ma mise en œuvre spécifique, je l'ai fait ce qui suit:

  • fois l'appel ajax sur le client et le script php sur le serveur ont les délais d'attente pour gérer, par exemple, les connexions cassées bien. S'assure également que l'appel ajax n'attend pas pour toujours.
  • L'appel ajax transmet un numéro de ligne comme référence au serveur pour lui indiquer le dernier numéro de ligne qu'il a reçu, afin que le serveur sache quelles lignes retourner. Initialement, la valeur est zéro, et le serveur renverra immédiatement les 10 dernières lignes du fichier
  • lorsque le script php est appelé, il utilise le dernier numéro de ligne du client pour faire une vérification rapide du fichier; si de nouvelles lignes ont déjà été ajoutées, elle les renvoie immédiatement, sinon elle se trouve dans une boucle (1 seconde) puis vérifie à la place les fichiers ctime (ou mtime) pour détecter quand de nouvelles lignes sont écrites. C'est plus efficace que de compter les lignes dans le fichier (ce qui peut être énorme) toutes les secondes.

Voir mon longpolling/arrière en temps réel en utilisant la mise en œuvre et jquery php ici: https://github.com/richardvk/web_file_tail

1

Scullog, ayant la capacité de partager le lecteur local dans le navigateur. Diffusez le fichier journal via Socket.IO via le navigateur. Il fonctionne sur n'importe quelle plate-forme telle que windows/linux/mac. Il fonctionne en mode service ou autonome.

+0

cela devrait être la réponse acceptée. Travaillez parfaitement. Merci de l'avoir fait. –