也许这是错误的方法,所以请随意重定向.
我正在try 将输入同步传输到Python脚本中.我的 idea 是,我有一个后台Python脚本,执行一些较长的初始设置功能,然后等待输入.接收到输入后,脚本将执行更多功能并返回等待输入.这不会在无头服务器上,因此这不是"用户输入"
这是我的 playbook :
import sys
# do some long functions
sys.stdin.flush()
data=""
while(1)
data = sys.stdin.read()
if data != "":
print("input: " + data)
sys.stdin.flush()
data=""
exit()
我在Ubuntu 22.04上.在一个终端中,我使用以下命令运行脚本:python3 rx.py</tmp/py-srv.input & echo $!>/tmp/py-srv.pid
这会创建一个pid文件,以便我稍后可以杀死它,并创建一个我可以写入以输入到脚本中的输入文件.
在另一个终端中,我写入输入文件:echo "test">/tmp/py-srv.input
在第一个航站楼我看到:input: test
耶!它工作...
但如果我try 再次写入输入文件echo "YAY!">/tmp/py-srv.input
,我在第一个终端上什么也没有得到.
不过,偶尔会出现这样的情况,如果我第二次写echo "testYAY!">/tmp/py-srv.input
,我在第一个终端就会得到input: AY!
.
我查看了. entry文件,注意到它在读取第一个输入后被清除,但在后续读取后不会被清除.这就是添加sys.stdin.flush()的原因,但这并没有解决任何问题.
我try 使用entry()函数,但得到一个EOFError: EOF when reading a line
错误,我认为这是由于使用单个&
启动脚本作为后台进程
看起来我已经很接近了,但它不适用于多次输入写入.我是否缺少Python的sys.stdin?为什么stdin.read()看不到对. select文件的第二次写入,除非它以第一次写入的字符串开始?
任何帮助都会很大,谢谢.