gpt4 book ai didi

python - 如何在 Python 脚本中接受管道输入和用户提示输入?

转载 作者:太空狗 更新时间:2023-10-30 01:02:09 25 4
gpt4 key购买 nike

我有一个脚本,旨在接受从标准输入管道输入的输入,然后提示用户进行更多输入。这是一个人为的例子来说明我的意思:

import sys

# Get input from stdin
input_nums = [int(n.strip()) for n in sys.stdin]

# Prompt user
mult = int(raw_input("Enter a number by which to multiply your input: "))

for num in input_nums:
print num*mult

当我从 stdin 通过管道输入数据时,python 将 stdin 解释为在到达 raw_input 之前已关闭,并且在读取一行时给出 EOFError: EOF:

[user]$ cat nums.txt
2
3
4
5
[user]$ cat nums.txt | python sample.py
Enter a number by which to multiply your input: Traceback (most recent call last):
File "sample.py", line 6, in <module>
mult = int(raw_input("Enter a number by which to multiply your input: "))
EOFError: EOF when reading a line

(请不要担心 cat 的无用使用......这只是一个最小的例子)

我想知道的是,是否有一种方法可以以某种方式将读取 sys.stdin 和调用 raw_input 分开,这样我就可以通过管道输入数据,然后提示用户输入。

进行了更新以通过消除转移注意力的方式更清楚地说明我真正想要的是什么,并添加了 EOFError 的回溯

结果 @TimPeter 的解决方案对我有用,但我必须将“CON:”更改为“/dev/tty”,因为我使用的是 UNIX,而不是 Windows。

最佳答案

我怀疑您运气不佳,至少对于任何一种跨平台解决方案而言都是如此。 Python 将 sys.stdin 用于 raw_input(),如果您调用 Python 以便 sys.stdin 位于管道的接收端,当管道输入结束时,Python 无法神奇地将 sys.stdin 更改为终端。

Here's a variant of the question使用特定于 Unix 的解决方法作为可接受的答案。通过改变程序调用的方式,巧妙地解决了一些(不是全部)问题。

对不起。

单向

这似乎适用于 Windows:

import sys
print len(sys.stdin.read()) # anything to consume piped input
sys.stdin = open("CON:", "r")
x = raw_input("sdfklj ")

也就是说,在读取管道输入后,sys.stdin 被重新绑定(bind)到打开的特殊文件 CON:(Windows 称之为 DOS 框)在阅读模式下。

查看您的 Unix 文档以了解在那里可以尝试的内容 - 也许是 /dev/tty1?根据平台的具体情况,您可能也需要摆弄大量的终端控制选项。这就是为什么我说(一开始)我认为您对任何跨平台解决方案都不走运。 Python 对终端设备没有特别的支持;也就是说,你要靠自己。

关于python - 如何在 Python 脚本中接受管道输入和用户提示输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19172563/

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