lia*_*ang 7 python stdin eclipse-plugin peek
我想打电话sys.stdin.readlines()而不从stdin中删除任何内容.我在Linux上使用Python2.7.
例如,我想要的是:
x = sys.stdin.readlines()
y = sys.stdin.readlines()
Run Code Online (Sandbox Code Playgroud)
然后x和y具有相同的字符串.如果我能从stdin读取并将内容放回去,那将是可以接受的.
背景:
我有一个模块,EITHER将一个文件作为输入和一个-optional参数或"一些输入通过管道进入模块"和一个-optional参数
mymodule.py myfile -option
or
echo "some input" | mymodule.py -option
Run Code Online (Sandbox Code Playgroud)
我有这个工作,它工作正常.我正在检查sys.stdin.isatty()以确定是否有输入管道输入.如果存在,如果命令行中有多个参数,模块将抛出错误(可能有一个-optional参数,但如果有,则指定没有文件标准输入)
我遇到问题的原因是因为我需要在命令行上传递单元测试,但也要在eclipse中传递.在命令行上一切正常,但它看起来像是用于eclipse的PyUnit插件sys.stdin.
如果我打电话sys.stdin.readlines(),那么eclipse会放弃运行单元测试.另外,sys.stdin即使我没有指定任何参数,eclipse正在推动进入,这使得很难确定是否存在有效参数.
在我看来,以某种方式获得sys.stdin.readlines()不改变内容将是一个解决方案,但我不知道如何做到这一点.解决这个问题的任何答案都会令人满意.
谢谢!
编辑:没有任何运气如...
foo = sys.stdin.readlines()
sys.stdin.write(foo)
Run Code Online (Sandbox Code Playgroud)
编辑:删除了在tearDown中恢复stdin并将其放入测试函数中,但没有效果
当您从管道中读取数据时,数据不再位于管道中。您可以使用轮询机制来查看是否有任何数据可供读取,但您无法在不删除内容的情况下查看内容,至少在 Linux 上不能。
如果提供了文件,我会忽略标准输入(即首先检查文件参数),如果没有提供文件作为参数,则验证标准输入。