我有以下代码,我遇到了麻烦。
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中读取它
感谢您的帮助
答案 0 :(得分:2)
在阅读临时文件之前调用assert process.wait() == 0
。
如果没有这个,你的Python程序正在读取临时文件,而不是ps
填充它。
仅供参考通常,您不需要临时文件来读取子进程的标准输出。使用stdout=subprocess.PIPE
创建,并使用例如process.communicate()
阅读其输出。