【发布时间】:2017-09-27 07:12:47
【问题描述】:
我正在编写一个命令行工具(我们称之为interactive_rm),它应该从 STDIN 逐行读取文件路径,以便它可以与 Unix 管道一起使用,例如下面的例子:
$ find . | interactive_rm
我目前正在像这样从 STDIN 读取每个路径:
def _parse_stdin():
for line in sys.stdin:
yield prepare_line(line)
现在的问题...在工具删除路径之前,它应该要求用户确认。为此,我会像这样使用input():
for path in _parse_stdin():
print('Do you want to delete this path: [y/n]\n' + path)
answer = input()
if answer == 'y':
delete(path)
但这不起作用,因为 STDIN 已经被管道占用了,所以 input() 函数被跳过或者我最终得到一个“EOFError: EOF when reading a line”。
有人知道解决办法吗?
【问题讨论】:
标签: python unix input pipe stdin