Python - 如何从shell读取stdin,并将stdout发送到shell和文件

3 投票
2 回答
4313 浏览
提问于 2025-04-16 18:51

我想写一个Python脚本,让它从命令行(bash)读取输入,同时把输出发送到命令行和一个重定向的文件。我试过以下方法:

$ cat test.py
#!/usr/bin/python

val = raw_input("enter val: ")
print val

$ ./test.py | tee out
testing
enter val: testing

$ cat out
enter val: testing

但不知道为什么,当我输入内容时,提示符会在我输入后才显示出来,这样我在输入时看不到提示符。在bash脚本中,我可以做到类似的效果。

$ cat test.sh
#!/bin/bash

echo "enter val: "
read val
echo $val

$ ./test.sh | tee out
enter val: testing
testing

$ cat out
enter val: testing

2 个回答

1

看看这个问题,似乎是raw_input在输出提示信息时写到了错误输出流(stderr)里。

http://bugs.python.org/issue1927

2
#!/usr/bin/python
import sys

print "enter val: ",
sys.stdout.flush()
val = raw_input()
print val

或者

#!/usr/bin/python
import sys

sys.stdout = sys.stderr
val = raw_input("enter val: ")
sys.stdout = sys.__stdout__
print val

撰写回答