2011-10-06 7 views
1

Je suis en train de construire un client SSH pour le navigateur Web (similaire à ajaxterm). J'ai construit un backend python qui utilise les SSHClient.invoke_shell(term='vt100')Paramiko et un serveur web qui communique avec un frontend (HTML + AJAX). Le système fonctionne et affiche la sortie lorsque j'envoie des commandes via le canal SSH, mais la sortie inclut des séquences d'échappement VT100. Si je comprends bien, tout ce que je reçois du canal SSH devrait être interprété comme des commandes pour une fenêtre de terminal 24x80? Ce qui signifie que les séquences d'échappement peuvent changer de couleur, effacer l'écran, supprimer des lignes, changer le comportement des lignes ... (J'ai trouvé une bonne liste here) Ce qui veut dire que je ne peux pas les effacer?vt100 émulation de terminal avec python/navigateur

J'ai vérifié la source d'Ajaxterm, mais je n'arrivais pas à comprendre comment la classe Terminal peut être utilisée (donc je pourrais l'utiliser à mes fins).

La question: quelle serait la façon la plus simple d'interpréter le flux de sortie et d'afficher correctement l'écran du terminal dans un navigateur? En d'autres termes, existe-t-il une bibliothèque qui analyse la sortie et conserve le contenu de l'écran pour moi?

Si j'ai mal compris le fonctionnement interne des terminaux, s'il vous plaît faites le moi savoir. Je n'ai pas eu beaucoup d'expérience avec eux dans le passé. :)

Répondre

2

J'ai essayé de faire la même chose il y a quelques jours. Je ne l'ai pas fini, mais j'ai trouvé quelques bibliothèques d'émulateur de terminal python.

Je choisis pyte, qui a une API propre et est facile à utiliser. Une liste d'autres bibliothèques effectuant le même travail est disponible à la fin du fichier README de pyte.

+0

Merci! Je l'ai essayé et ça a l'air propre et utile. Avez-vous eu de la chance pour en avoir les couleurs? Si je comprends bien, screen.display renvoie le contenu des caractères uniquement? – johndodo

+0

screen.display renvoie uniquement les caractères. La seule partie délicate est que l'affichage est une liste de chars. Char est plus ou moins un namedtuple. Les champs intéressants de Char sont des données pour le char actuel, et bg et fg pour la couleur. Il y a aussi quelques autres. Vous pouvez regarder le code pour plus d'informations: https://github.com/selectel/pyte/blob/develop/pyte/screens.py#L68 – madjar

+0

Ok, je le ferai. Mes compétences en python font encore un peu défaut, mais je vais me débrouiller. :) Sinon pyte ressemble exactement à ce que je cherchais, merci encore! – johndodo