Python 蟒蛇2.7窥视标准DIN

Python 蟒蛇2.7窥视标准DIN,python,eclipse-plugin,stdin,peek,Python,Eclipse Plugin,Stdin,Peek,我想调用sys.stdin.readlines(),而不从stdin中删除任何内容。我正在Linux上使用Python2.7 例如,我想要的是: x = sys.stdin.readlines() y = sys.stdin.readlines() 那么x和y有相同的字符串。如果我能读一下stdin的内容并把它放回去的话,那就可以接受了 背景: 我有一个模块,它要么接受一个文件作为输入和一个-optional参数,要么接受“通过管道传输到模块中的一些输入”和一个-optional参数 mymo

我想调用
sys.stdin.readlines()
,而不从stdin中删除任何内容。我正在Linux上使用Python2.7

例如,我想要的是:

x = sys.stdin.readlines()
y = sys.stdin.readlines()
那么x和y有相同的字符串。如果我能读一下stdin的内容并把它放回去的话,那就可以接受了

背景:

我有一个模块,它要么接受一个文件作为输入和一个-optional参数,要么接受“通过管道传输到模块中的一些输入”和一个-optional参数

mymodule.py myfile -option
or
echo "some input" | mymodule.py -option
我有这个工作,它工作得很好。我正在检查
sys.stdin.isatty()
,以确定是否有任何输入传入。如果有,如果命令行中有多个参数,则模块将抛出错误(可以有一个-可选参数,但如果有stdin,则没有指定文件)

我遇到问题的原因是,我需要让单元测试在命令行上通过,但在eclipse中也要通过。在命令行上一切正常,但eclipse的PyUnit插件似乎也使用了
sys.stdin

如果我调用sys.stdin.readlines(),那么eclipse将放弃运行单元测试。此外,eclipse甚至在我没有指定任何参数的情况下也在将内容推入sys.stdin,这使得确定是否存在有效参数变得很困难

在我看来,在不更改内容的情况下获取sys.stdin.readlines()似乎是一个解决方案,但我不知道如何做到这一点。任何解决这个问题的答案都是令人满意的

可能重复:

谢谢

编辑:没有任何运气像

foo = sys.stdin.readlines()
sys.stdin.write(foo)

编辑:删除了在拆卸中恢复标准数据,并将其放在测试功能中,但没有任何效果

当您从管道中读取数据时,数据不再位于管道中。您可以使用轮询机制来查看是否有任何数据要读取,但在不删除内容的情况下无法查看内容,至少在Linux上是这样


如果提供了文件(即首先检查文件参数),我将忽略stdin,如果没有提供文件作为参数,则验证stdin。

我很快就放弃了这一点。我有幸从stdin读取数据,然后设置sys.stdin=open('/dev/tty','r+'),但这在Eclipse中不起作用。我不知道输入来自何处,因为最终客户将在命令行上使用该模块。我认为最好的解决方案是你的建议——首先检查文件,然后查看stdin