【发布时间】:2017-09-09 10:54:16
【问题描述】:
如果不引发 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
我认为这告诉我需要清除标准输入缓冲区?但我不确定如何,因为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
请记住,我不是程序员,也没有 CS 教育或背景。我只是编写脚本来自动化我的部分非技术性工作。因此,如果您知道任何关于 stdin/stdout 如何在 Python 的 shell 中工作的好的初学者资源,请告诉我们。
【问题讨论】:
-
json.load(sys.stdin)消耗了标准输入上的所有可用数据。没有什么可读的了,因此是 EOF。
标签: python python-3.x stdin