将标准输入发送给REPL后,Python伪终端挂起

问题描述

我正在尝试使用python pty模块捕获从标准输入返回的REPL的输出。使用pty文档中的this example,我在名为script.py的可执行文件中包含以下代码

#!/usr/bin/env python
# script.py
import pty
import sys

data = []

def read(fd):
    b = os.read(fd,1024)
    data.append(b.decode())
    return b

pty.spawn(sys.argv[1:],read)
print(''.join(data))

不幸的是,当我在命令行中运行以下命令时,它会无限期挂起:

echo $'a = 1\na\n\cd' | ./script.py python

相比之下,当我出于相同目的使用UNIX script实用程序时,它可以正常工作:

echo $'a = 1\na\n\cd' | script -q /dev/null python

结果:

Python 3.8.2 | packaged by conda-forge | (default,Apr 24 2020,07:56:27)
[Clang 9.0.1 ] on darwin
Type "help","copyright","credits" or "license" for more @R_20_4045@ion.
>>> a = 1
>>> a
1
>>>

我在做什么错?免责声明:我不知道我在做什么。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)