Я открываю PTY (в Python / Linux) и пишу в него.Я могу читать с него через minicom
отлично.Но я не могу читать из него в другой программе на Python (или C ++).Вот свернутый пример:
provider.py (открывает pty / пишет в него):
import os, sys
from time import sleep
master_fd, slave_fd = os.openpty()
print "minicom -D %s" % os.ttyname( slave_fd )
for i in range(0,30):
d = str(i % 10)
os.write( master_fd, d )
sys.stdout.write( d )
sys.stdout.flush()
sleep( 2 )
os.close( slave_fd )
os.close( master_fd )
print "\nDone"
consumer.py (пытается открыть / прочитать):
import os, sys
from time import sleep
pts=raw_input("Enter pts number:")
while True:
fd=0
try:
fd=os.open('/dev/pts/%d' % (pts,),
os.O_RDONLY | os.O_NONBLOCK )
sys.stdout.write( os.read(fd, 1 ) )
sys.stdout.flush()
except Exception as e: print e
if fd: os.close(fd)
sleep(1)
Результат чтения всегда:
[Errno 11] Ресурс временно недоступен
Если я читаю в режиме блокировки, он просто блокируется, пока производитель не завершит работу,Затем он говорит, что файл не существует.
Я потратил несколько дней, пытаясь установить различные режимы, разрешения, блокировки и т. Д., И ничто, похоже, никуда меня не привело.Подобные вещи легко работают с обычными файлами.Кроме того, еще раз обратите внимание, что minicom может читать pty без помех.Далее, используя lsof
, я вижу, что и minicom, и мой скрипт consumer.py действительно открывают файл - это просто чтение, которое не работает в примере с python.Так в чем же секрет миникома?Я попытался найти такое в исходном коде Minicom, но мне не удалось найти ничего, что я мог бы использовать.
В идеале, мой продюсер мог бы легко открывать и читать (как в моем примере с потребителем), но если я смогу увидеть эту работу, я готов изменить любой конец ...