无法从python临时文件中读取

时间:2014-08-11 19:45:35

标签: python file-io

我有以下代码,我遇到了麻烦。

import os
import tempfile
import subprocess

def list_pids(pid):
  if pid == "" or pid == None:
    return False

  command = ["ps", "-U", "%s" % os.getuid(), "-o", "pid"]
  tmp = tempfile.NamedTemporaryFile(delete=False)
  process = subprocess.Popen(command, stdout=tmp)
  tmp.seek(0) # hacky. but have to do it
  print tmp.tell()
  line = tmp.read()
  print tmp.tell()
  tmp.close()
  print tmp.name

这段代码是为了做一件简单的事情,为当前用户获取所有PID并将输出转储到命名的临时文件中。

该计划的输出是:

0 # initial tell()
0 # tell() after read()
/tmp/tmp8DoUZj # name of named file

有人可以弄清楚这里有什么问题吗?输出被转储到/tmp/tmp8DoUZj但我无法在python中读取它

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

在阅读临时文件之前调用assert process.wait() == 0

如果没有这个,你的Python程序正在读取临时文件,而不是ps填充它。

仅供参考通常,您不需要临时文件来读取子进程的标准输出。使用stdout=subprocess.PIPE创建,并使用例如process.communicate()阅读其输出。