Comment puis-je utiliser python telnetlib pour récupérer des données à partir d'un appareil pour une période fixe de temps?
Je me connecte à un périphérique matériel via telnet. Ce dispositif est assez simple en termes d'I/O. j'ai Donc soumettre une commande, et après que l'appareil pompes de données, une ligne à la fois, une fois par seconde. Chaque ligne contient un nombre.
Donc ma question est: si je le connecter à cet appareil à l'aide de python telnetlib, comment puis-je récupérer les données pour une période de temps fixe (ou un nombre fixe de lignes de données)?
J'ai essayé d'utiliser tous les différents read_ commandes, mais ils ont tous l'air de bloquer indéfiniment, en dehors de read_until, que je ne peux utiliser que la sortie ne peut pas être utilisé pour déterminer le moment d'arrêter.
(Je suis sous python 2.5 sous Cygwin, btw).
Edit: Peut-être la vraie question est, dois-je utiliser telnetlib à tous pour ce, ou devrais-je utiliser le support de module?
OriginalL'auteur Ben | 2009-03-10
Vous devez vous connecter pour publier un commentaire.
À partir de votre description, je ne suis pas clair si vous utilisez telnetlib parce que l'appareil auquel vous vous connectez nécessite la configuration du terminal fourni par telnet ou parce qu'il semblait être la bonne chose à faire.
Si l'appareil est aussi simple que de vous décrire--c'est à dire pas de négociation terminal options de connexion--avez-vous envisagé la asynchat module? Il serait approprié pour la "commande envoyer, lire les lignes", sorte de IO modèle que vous décrivez.
Sinon, pour quelque chose de plus faible niveau, vous pouvez utiliser le socket module d'ouvrir la connexion à l'appareil, puis de s'asseoir dans une boucle cadencée et
read()
les données entrantes. Si les lignes sont de retour à la ligne terminée, il doit être simple pour vous d'identifier chaque individu. Si vous êtes concernés par le blocage, le bâton de cette boucle dans son propre thread.OriginalL'auteur sstock
Ça sonne comme le blocage n'est pas vraiment votre problème, puisque vous savez que vous ne serez blocage pour une seconde. Pourquoi ne pas faire quelque chose comme:
OriginalL'auteur Eli Courtwright
Dans mon expérience, la plupart de ces dispositifs utilisent certaines invite, dans ce cas
Telnet.read_until()
est approprié:Si non utilisable (répétitif) la demande est présentée par l'appareil, essayez de
Telnet.read_very_eager()
, ouTelnet.read_very_lazy()
:OriginalL'auteur gimel
De lire des lignes dans une boucle jusqu'à ce que vous avez lu le nombre de lignes ou le temps limite a été atteinte. Cependant, il ne sonne pas comme vous besoin réel d'un telnet bibliothèque. Pourquoi ne pas utiliser un simple TCP socket pour la connexion?
OriginalL'auteur Judge Maygarden