我想打电话sys.stdin.readlines()
而不从标准输入中删除任何内容。我在 Linux 上使用 Python2.7。
例如,我想要的是:
x = sys.stdin.readlines()
y = sys.stdin.readlines()
那么 x 和 y 有相同的字符串。如果我可以从标准输入读取并将内容放回原处,那将是可以接受的。
背景:
我有一个模块,它要么将一个文件作为输入和一个 -optional 参数,要么将“一些输入通过管道传输到模块中”和一个 -optional 参数
mymodule.py myfile -option
or
echo "some input" | mymodule.py -option
我有这个工作,它工作正常。我正在检查sys.stdin.isatty()
以确定是否有任何输入管道输入。如果有,如果命令行中有多个参数,模块将抛出错误(可以有一个 -optional 参数,但如果有,则不指定文件标准输入)
我遇到问题的原因是因为我需要在命令行上通过单元测试,但也在 eclipse 中。在命令行上一切正常,但看起来sys.stdin
也使用了 eclipse 的 PyUnit 插件。
如果我调用sys.stdin.readlines()
,则 eclipse 放弃运行单元测试。此外,即使我没有指定任何参数,eclipse 也会将事情推进sys.stdin
,这使得很难确定是否有有效的参数。
在我看来,在sys.stdin.readlines()
不改变内容的情况下以某种方式获取将是一个解决方案,但我不知道该怎么做。解决这个问题的任何答案都会令人满意。
谢谢!
编辑:没有像...这样的运气
foo = sys.stdin.readlines()
sys.stdin.write(foo)
编辑:删除了在 tearDown 中恢复标准输入并将其放入测试功能,但没有效果