我正在打开一个 PTY(在 Python/Linux 中)并写入它。我可以通过minicom完美读取它。但是,我无法在另一个 Python(或 C++)程序中读取它。这是一个最小化的例子:producer.py(打开 pty / 写入):import os, sysfrom time import sleepmaster_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, sysfrom time import sleeppts=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的秘密是什么?我试图在 minicom 源代码中找到这样的东西,但我没有找到任何我可以使用的东西。理想情况下,我的制作人会使其易于打开和阅读(就像在我的消费者示例中一样),但是如果我能看到这项工作,我愿意修改任何一端......
添加回答
举报
0/150
提交
取消