標準入力からパイプされた入力を受け入れ、ユーザーにさらに入力を求めるように設計されたスクリプトがあります。これは、私が何を意味するかを示す不自然な例です。
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 when reading a line
。
[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 のソリューションはうまくいきましたが、Windows ではなく UNIX を使用しているため、「CON:」を「/dev/tty」に変更する必要がありました。