我无法让以下脚本正常运行,每次都会抛出EOFError异常:
#!/usr/bin/env python3
import json
import sys
# usage:
# echo '[{"testname": "testval"}]' | python3 test.py
myjson = json.load(sys.stdin)
print(json.dumps(myjson))
answer = input("> ") # BUG: EOFError: EOF when reading a line
print(answer)
我读了这个问题,它似乎与之相关:Python STDIN User Input Issue。
我认为这告诉我需要清除stdin缓冲区?但我不确定如何做到这一点,因为
print(sys.stdin.readline())
只输出一个换行符,而EOFError仍然存在。我还尝试使用
sys.stdin.flush()
方法(在这个问题中找到:Usage of sys.stdout.flush() method),虽然我仍然不明白它的作用,因为我在官方文档(3.6)中找不到它,我找到的最接近的是这个,但它没有提到flush:https://docs.python.org/3/library/sys.html
请记住,我不是程序员,也没有计算机科学的教育或背景。我只是编写脚本来自动化我的非技术性工作的某些部分。因此,如果您知道任何关于在Python中使用shell的stdin/stdout的好的入门资源,请告诉我。
json.load(sys.stdin)
消耗了标准输入中所有可用的数据。没有剩余可读取的内容,因此出现了 EOF。 - melpomene