Python de la lecture et de l'écriture à l'ats

Arrière-plan: Si vous le souhaitez, passez à la section de problème

Je suis en train de travailler sur un front-end pour l'équipement de test. Le but de l'extrémité avant est de rendre plus facile d'écrire de longs scripts de test. À peu près juste de les rendre plus lisibles par l'homme et à l'écriture.

Le matériel sera testé à l'aide d'un Prologix GPIB-USB Controller (voir prologix.biz). Nous avons trouvé un tutoriel sur http://heliosoph.mit-links.info/gpib-on-debian-linux-the-easy-way/ et a fait toutes les étapes, et cela a fonctionné!

Que nous n'avons pas l'équipement de test encore, nous avons voulu écrire un émulateur en Python à l'aide de openpty. Nous avons le GPIB-USB Controller, tout simplement pas ce qui est connecté à. J'ai eu l'émulateur de travail comme un remplacement parfait pour le GPIB-USB. Cela signifie que je suis le "GPIB sur Debian ..." tutoriel (ci-dessus) et d'obtenir une sortie que j'ai programmé l'émulateur de retour. L'entrée et la sortie ont été fait de la même manière que le tutoriel juste de la lecture et de l'écriture à partir d'un pty périphérique (par exemple /dev/pts/2) au lieu de l'ats (par exemple /dev/ttyUSB0).

Maintenant que l'émulateur fonctionne, nous voulons écrire une extrémité avant qui peut être utilisé pour écrire des scripts facilement. Le but est de faire une sorte de système de macro qui écrit un tas de commandes lorsque nous appelons une fonction.

PROBLÈME: existe en utilisant à la fois l'émulateur et l'appareil

Je suis l'aide de la suite de fonctions Python à lire, à écrire, et d'ouvrir les ats/pty appareils, mais je n'obtiens pas le même résultat que j'obtiens si je viens d'utiliser echo et chat en bash.

tty = os.open(tty_path, os.O_RDWR)
os.read(tty, 100)
os.write(tty, "++ver")

par exemple, j'attendrais la suite pour avoir l'équivalent

$ cat < /dev/pty/2 &   # According to the tutorial, this must be run in parallel
$ echo "++ver" > /dev/pty/2
Prologix GPIB Version 1.2.3.4 ...

et

tty = os.open("/dev/pyt/2", os.o_RDWR)
os.read(tty, 100) # In separate Thread to be run in parallel
os.write(tty, "++ver") # in main thread

La sortie est très différente, veuillez expliquer pourquoi et comment je peux le résoudre.

CODE COMPLET est ici: http://pastebin.com/PWVsMjD7

OriginalL'auteur aidan.plenert.macdonald | 2014-01-03