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