[英]Read piped input from other script, while also reading user input, in Python (2.7 and 3.x)
我有两个Python脚本,我想将第一个脚本的输出传递到第二个脚本,同时还能够从第二个脚本的控制台读取用户输入。
这是非常简化的示例代码,可以让我大致了解一下:
py_a.py
print(1+2)
py_b.py
import sys
invalue = sys.stdin.read()
print("value from py_a is " + invalue)
answer = input("Talk to me! ")
# do something with answer
在终端中,我希望执行类似python py_a.py | python py_b.py
python py_a.py | python py_b.py
但是,当我尝试从控制台获取输入时,会发生以下情况:
Talk to me! Traceback (most recent call last):
File "py_b.py", line 3, in <module>
answer = input("Talk to me! ")
EOFError: EOF when reading a line
关于如何使它起作用的任何想法?
您已经用完read()
方法耗尽了标准输入并到达了文件结尾,该方法会读取整个文件流直到EOF,因此当input()
要从同一文件流中读取更多内容时,不能,因为文件流已经达到EOF。
您应该删除line = sys.stdin.read()
行,因为您实际上只希望从用户那里input()
一行,而input()
函数会这样做。
编辑:如果希望py_b.py
在读取从py_a.py
标准输入后能够从控制台读取,则可以安装keyboard
模块以直接从用户的键盘读取:
import keyboard
import time
class InputHandler:
def __init__(self):
self.buffer = ''
def on_press(self, event):
if event.name == 'enter':
self.do_something()
self.buffer = ''
elif event.name == 'backspace':
self.buffer = self.buffer[:-1]
else:
self.buffer += event.name
def do_something(self):
global running
if self.buffer == 'exit':
running = False
print('You entered: ' + self.buffer)
invalue = sys.stdin.read()
print("value from py_a is " + invalue)
keyboard.on_press(InputHandler().on_press)
running = True
while running:
time.sleep(1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.