我正在使用以下代码来获取程序的最大内存使用情况。
问题在于程序的初始运行时,内存使用输出为(0,0),但随后会显示正确的输出。我不知道这是为什么。对于一些程序,例如C++中的Hello World程序,输出为
该内容涉及 IT 技术。
import os, subprocess , psutil
def mem(cmd):
try:
with open('in.txt','r') as infile, open('out.txt', 'w') as outfile:
p=psutil.Popen("./"+cmd,shell=False,stdin=infile,stdout = outfile)
print p.memory_info()
except Exception:
print "Error"
cmd=raw_input()
mem(cmd)
问题在于程序的初始运行时,内存使用输出为(0,0),但随后会显示正确的输出。我不知道这是为什么。对于一些程序,例如C++中的Hello World程序,输出为
pmem(rss=4096, vms=315392)
,大约为0.3M(我认为输出单位为字节),但在ideone.com上运行Hello World程序的输出为~3M。为什么会有这种差异?cmd是可执行文件的名称。命令print subprocess.check_output(['ps', 'v', '-p', str(p.pid)])
的输出结果如下:PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND
16150 pts/16 Z+ 0:00 0 0 0 0 0.0 [a.out] <defunct>
以下是我的一个C++示例程序:`int a[1000000];
int main()
{
return 0;
}`
有时会返回 pmem(rss=4096, vms=4313088),有时会返回 pmem(rss=0,vms=0)。
该内容涉及 IT 技术。
["python", "-c", "pass"]
)重现它吗?你确定你没有抑制异常,即Popen()
成功启动了吗? - jfsstderr=PIPE
,那么你应该从p.stderr
读取,否则如果它在stderr上生成足够的输出以填充相应的操作系统管道缓冲区,则进程可能会永远阻塞。 - jfsprint subprocess.check_output(['ps', 'v', '-p', str(p.pid)])
显示什么? - jfs