在使用stdout时进行交互式用户输入

1 投票
2 回答
1377 浏览
提问于 2025-04-16 15:51

在一个脚本中,我使用 sys.stdout.write() 来输出处理后的数据到标准输出(stdout),然后我在命令行中把标准输出重定向到一个文件:

python.exe script.py > file.out

我无法在 Python 脚本中直接写入文件,因为重定向的文件是无法提前知道的。

我的问题是,我还使用了 raw_input(),因为我需要用户在处理开始前输入一个特定的数字,但由于我重定向了标准输出,提示信息就不会显示出来,也就是说,脚本在等待用户输入时什么都不显示。

有没有人能给我个建议,怎么解决这个问题?

谢谢!

2 个回答

2

看看这个对你有没有用:

#!/usr/bin/python
import sys
import os
# Disable buffering for stdout
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
x = raw_input(">")
print x

把它这样运行:

python ./test.py | tee ./file.out

现在,你会在控制台上看到输出,同时它也会被保存到file.out这个文件里。

0

把文件名当作命令行参数来用,而不是把输出重定向到文件。这样,你就可以正常打印输出或者使用 raw_input() 了。举个例子:

import sys

outfile = open(sys.argv[1], 'w')
# write to the outfile
x = raw_input("What's your name?")
outfile.write(x)

使用方法:

python myscript.py file.out

这样在任何平台上都能运行。

撰写回答