python:如何将文件输出重定向到流

时间:2015-03-04 12:29:10

标签: python python-2.7

我正在处理可执行文件的GUI版本。该文件有一个选项

exefile --output output.txt

我的任务不是保存到output.txt,但是可以使用文件中的一些信息来绘制图表吗?我有一些想法使用pyqtgraph绘制图形。问题是如何将其作为文本流?有什么想法吗?

第二个问题相似但更难。同一个可执行文件也可以输出到.wav

exefile --outwav outwav.wav

而不是保存.wav文件,如何以“实时”方式绘制出来? 非常感谢。

注意:

  1. 我的目的是构建一个包装器,我在可执行文件中没有任何控件。

  2. 理想情况下,可执行文件应该连续运行,而我会在时间内绘制输出/波形

2 个答案:

答案 0 :(得分:4)

假设:

  • 您使用的是Unix平台(Linux,Mac OSX)
  • 原始exefile无法做您想做的事情
  • 您不希望/无法修改exefile

最佳选择是使用named pipe

这就像一个临时文件,但不会碰到硬盘 - 一切都在内存中发生。它比临时文件有几个优点:

  • 您可以每秒处理几千兆字节,而不会丢弃磁盘I / O
  • 你不必同步读取,必须特别注意EOF,而不是真正知道exefile何时完成写作。
  • 你要避免填写文件系统。

您可以使用os.mkfifo创建命名管道。从它读取就像你从普通文件中读取一样。

请注意,如果写入命名管道的速度比程序读取速度快,exefile会定期进行I / O阻塞。同样,如果读取速度超过exefile写入速度,则程序将阻止I / O.

答案 1 :(得分:1)

我认为最好的方法是写入临时文件,然后在需要的地方读取它。在python中很容易做到:

from tempfile import NamedTemporaryFile
f = NamedTemporaryFile() # this is file object you will read from
f.name # and here you can get it's name

# here is simple way to run your command
import os
exit_code = os.system("execfile --output %s" % (f.name,))
if not exit_code:
    data = f.read()
else:
    print "Oooops. exit code = %s" % (exit_code,)

查看doc了解详情。