为了账号安全,请及时绑定邮箱和手机立即绑定

无法从外部进程读取 PTY(伪终端文件)

无法从外部进程读取 PTY(伪终端文件)

RISEBY 2021-08-17 18:38:38
我正在打开一个 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 源代码中找到这样的东西,但我没有找到任何我可以使用的东西。理想情况下,我的制作人会使其易于打开和阅读(就像在我的消费者示例中一样),但是如果我能看到这项工作,我愿意修改任何一端......
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 234 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信