无法成功将stdout从Popen重定向到temp-fi

2024-09-30 08:37:57 发布

您现在位置:Python中文网/ 问答频道 /正文

标题说明了一切,真的。当前正在运行Python2.7.8,使用subprocess32。最小复制片段,直接从REPL复制:

Python 2.7.8 (default, Aug 14 2014, 13:26:38)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tempfile
>>> import subprocess32 as subp
>>> tfil = tempfile.TemporaryFile()
>>> tfil
<open file '<fdopen>', mode 'w+b' at 0x7f79dcf158a0>
>>> proc = subp.Popen(['ls', '-al'], stdout=tfil, stderr=subp.STDOUT)
>>> proc
<subprocess32.Popen object at 0x7f79dcf04a50>
>>> proc.wait()
0
>>> tfil.read()
''
>>>

在任何组合中对结果没有影响的代码更改:

  • 使用subprocess代替subprocess32
  • 使用NamedTemporaryFile代替TemporaryFile
  • tfil和{}中的一个或两个上设置{}
  • 如果我尝试subp.Popen(['ls', '-al'], stdout=sys.stdout, stderr=subp.STDOUT),输出会很好地重定向到终端-但是我需要在其他地方捕获它,我不能将它与实际的终端输出混合在一起。将sys.stdout重定向到临时文件,然后在该过程完成后再将其设置回该文件,也不起作用。在

我之所以需要这样做,是因为我想在实际的非最小示例程序(qacct -j)中使用的命令的输出对于subprocess.PIPE来说太大了,并引发了一个MemoryError(无更多详细信息)。在

我发现的最相关的现有问题是this,但这实际上没有帮助。在


Tags: importstderrstdoutproctempfilelsatsubprocess
1条回答
网友
1楼 · 发布于 2024-09-30 08:37:57

文件已正确写入,但您的tfil.read()命令将从上次写入的位置开始读取,因此它将不返回任何内容。您需要先呼叫tfil.seek(0)。在

相关问题 更多 >

    热门问题