使用>保存Python脚本的输出在使用raw_input()时使用bash

时间:2016-02-26 02:28:14

标签: python bash

这是一个奇怪的问题,我不能正确缩小搜索条件以找到答案。

我的python脚本有一个raw_input来提示用户输入值。但是,当我尝试运行脚本并将其汇集到文件中时,它会崩溃。

类似" script.py> save.txt的" 不会工作。它甚至没有在命令行中正确地提示我输入。似乎并没有任何迹象表明为什么它不能直观地工作。

1 个答案:

答案 0 :(得分:3)

raw_output将其提示输出到stdout,您将其重定向到文件。因此,您的提示将最终出现在文件中,程序似乎不会显示提示。一种解决方案是将提示输出到stderr

import sys

sys.stderr.write('prompt> ')
value = raw_input()
print('value was: ', value)

您还可以避免使用相同脚本同时使用管道和交互式输入。使用argparse从命令行标志获取输入并使用管道,或者创建一个将输出保存到文件本身的交互式程序。

根据程序的逻辑,您还可以检查stdout是否连接到实时控制台:

is_tty = os.isatty(sys.stdout.fileno())

Dolda2000也有一个关于写入/dev/tty的好处,它将写入正在运行的脚本的控制终端,即使 stdin和{{1}被重定向。不过,那里的交易是,如果你没有在终端上运行,就不能使用它。

stderr