【问题标题】:python2.7 peek at stdinpython2.7 窥视标准输入
【发布时间】:2013-07-16 16:56:22
【问题描述】:

我想拨打sys.stdin.readlines() 而不从标准输入中删除任何内容。我在 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() 以确定是否有任何输入管道输入。如果有,如果命令行中有多个参数,模块将抛出错误(可以有一个-可选参数,但没有指定文件如果有标准输入)

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

如果我调用sys.stdin.readlines(),那么 eclipse 会放弃运行单元测试。此外,即使我没有指定任何参数,eclipse 也会将内容推送到sys.stdin,这使得很难确定是否有有效的参数。

在我看来,以某种方式获取sys.stdin.readlines() 而不更改内容将是一个解决方案,但我不知道该怎么做。解决这个问题的任何答案都会令人满意。

可能重复:Peek into stream of Popen pipeline in Python

谢谢!

编辑: 没有运气...

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

编辑:删除了在tearDown中恢复stdin并将其放在测试函数中,但没有效果

【问题讨论】:

    标签: python eclipse-plugin stdin peek


    【解决方案1】:

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

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

    【讨论】:

    • 我很快就放弃了。我从标准输入中读取了一些运气,然后设置 sys.stdin = open('/dev/tty', 'r+'),但这在 Eclipse 中不起作用。我不愿弄清楚输入的来源,因为最终客户无论如何都会在命令行上使用该模块。我认为最好的解决方案是您的建议——先检查文件,然后查看标准输入
    猜你喜欢
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 2012-06-08
    相关资源
    最近更新 更多