我有以下代码,但遇到问题。
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 中读取它
感谢帮助
最佳答案
在读取临时文件之前调用 assert process.wait() == 0
。
如果没有这个,您的 Python 程序读取临时文件的速度会比 ps
填充临时文件的速度快。
仅供引用,通常您不需要临时文件来读取子进程的标准输出。使用 stdout=subprocess.PIPE
创建它,并使用例如process.communicate()
读取其输出。
关于python - 无法读取 python 临时文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25251152/