gpt4 book ai didi

python - 从管道读取 STDIN 时获取用户输入?

转载 作者:太空宇宙 更新时间:2023-11-04 02:41:15 26 4
gpt4 key购买 nike

我正在编写一个命令行工具(我们称它为 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行”

有人知道解决这个问题的方法吗?

最佳答案

stdin 被重定向时,它需要重新打开终端才能从中读取,例如:

from __future__ import print_function

import os

def main():
tty = os.open("/dev/tty", os.O_RDONLY)
while True:
r = os.read(tty, 1024)
if not r: # Wait for Ctrl-D.
break
print("----", r)

if __name__ == "__main__":
main()

然后像下面这样运行它来测试它:

python t.py < /dev/null

请注意,终端可能不可用。例如,如果命令通过 ssh session 运行,而没有将终端分配为 ssh -T ... command

关于python - 从管道读取 STDIN 时获取用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46441623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com