comment utiliser /dev/ptmx pour créer un port série virtuel?
J'ai un programme, à l'aide de pyserial, et je veux le tester sans l'aide d'un port série réel de l'appareil.
Dans windows, j'utilise com0com, et sous linux, je sais qu'il existe une méthode pour créer un port série virtuel paire sans l'aide de programme supplémentaire.
donc, je regarde le manuel, et trouvé pts, /dev/ptmx, mais je ne sais pas comment créer une paire en suivant le manuel, quelqu'un peut-il me donner un exemple?
J'ai essayé(en python):
f = open("/dev/ptmx", "r")
et il fonctionne, /dev/pts/4 est créé.
et j'ai essayé:
f = open("/dev/4", "w")
et le résultat est:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 5] Input/output error: '/dev/pts/4'
edit:
J'ai trouvé une solution(contourner), à l'aide de socat.
socat PTY,link=COM8 PTY,link=COM9
puis COM8 COM9 sont créés en tant que port série virtuel paire.
OriginalL'auteur linjunhalida | 2010-02-01
Vous devez vous connecter pour publier un commentaire.
Par les docs, vous avez besoin ptsname pour obtenir le nom de l'esclave, du côté de la pseudo-terminal, et aussi, selon les docs,
Vous devriez être en mesure d'utiliser
ctypes
d'appeler toutes les fonctions nécessaires.J'ai trouvé un long C exemple, developerweb.net/forum/showthread.php?t=5623 , mais pas de Python exemples.
Python exemples sont cachés dans le
pty
module, bien qu'idéalement il permetos.openpty
faire le travail quand il peut 🙂Tx @Thomas! Faire des études pty sources de nouveau...
openpty est grande, et je peux l'utiliser pour l'IPC, mais pas adaptée pour tester un autre programme à l'aide du port série...
OriginalL'auteur Alex Martelli
J'étais en train de faire une application qui fait usage de ports série virtuels dans le but de communiquer avec certains périphériques distants à l'aide de TCP/Série de conversion... et je suis tombé sur un problème analogue à la vôtre. Ma solution a travaillé comme suit:
Bien que le nom du port du maître est le même si vous cochez (/dev/ptmx) le fd est différent si vous créez un autre maître, esclave paire, de sorte que la lecture à partir du master, vous reçoit le message délivré à son attribuée esclave. J'espère que cela vous aide à vous ou quelqu'un d'autre qui vient à travers un problème similaire à celui-ci.
Merci. C'était juste ce dont j'avais besoin pour se moquer d'une interface série pour le test.
OriginalL'auteur Aquiles
Je ne connais pas python, mais je peux vous diriger dans la bonne direction: regardez ici à un code C de l'échantillon. Voici la l'homme page pour le /dev/ptmx. Assurez-vous que les autorisations et le propriétaire est correct!. Voici l'affiche sur le linuxquestions forum sur la façon de l'utiliser à partir de C.
OriginalL'auteur t0mm13b
Vous devriez envisager d'utiliser la
pty
module au lieu de cela, ce qui devrait prendre soin de cela pour vous. (elle ouvre /dev/ptmx ou des appelsopenpty
ou ouvre un autre dispositif approprié, en fonction de la plate-forme.)OriginalL'auteur Thomas Wouters
Vous pourriez construire un objet factice qui implémente la même interface que le
pySerial
classes que vous utilisez, mais faire quelque chose de complètement différent et facilement reproductibles, comme la lecture et l'écriture sur les fichiers/terminal/etc.Par exemple:
Si il charlatans comme un canard, et il les canards comme un canard...
OriginalL'auteur badp