Python:将命令输出存储在变量中

我想使用该工具测量命令的时间和 CPU 使用率/usr/bin/time。但是当我这样做时os.popen( "/usr/bin/time -f \t%E MM:ss:mm ls -R" ).read()它也存储ls -R. 我该怎么做才能只存储/usr/bin/time输出?


我也尝试过,subprocess但它也不起作用。


out = subprocess.Popen(['/usr/bin/time', '-f', '"\t%E MM:ss:mm"', 'ls', '-R'], 

       stdout=subprocess.PIPE, 

       stderr=subprocess.STDOUT)

stdout,stderr = out.communicate()

print( stdout )

在终端中运行命令如下所示:


输入:


/usr/bin/time -f "\t%E M:ss:mm, \t%P CPU" ls -R    

输出:


.:

Dockerfile  input  output  README.md  src  Test.py


./input:

links.txt  raw  yuv


./input/raw:


./input/yuv:


./output:


./src:

InstallEncoderArm.sh  InstallEncoderx86.sh  RunTests.py

    0:00.00 M:ss:mm,    100% CPU


POPMUISE
浏览 169回答 3
3回答

慕村225694

您需要将命令的输出发送到/dev/null>/usr/bin/time -f "\t%E real,\t%U user,\t%S sys" ls -Fs >/dev/null        0:00.01 real,   0.00 user,      0.01 sys这里的复杂性是我们想要丢弃命令输出但存储命令的输出/usr/bin/time。将 的输出存储usr/bin/time为变量稍微复杂一些,因为/usr/bin/time它在 stderr 上显示它的输出。所以我们需要将命令输出发送到dev/null,然后将 time 的输出从 stderr 重定向并捕获到一个变量中。假设您可能想要执行比 ls -R 更复杂的命令,我们通常会调用 sh -c 'exec ' 这将在未来为您提供更多选择。因此:result=$(/usr/bin/time -f "\t%E MM:ss:mm" sh -c 'exec ls -R >/dev/null' 2>&1 tee)执行输出:>result=$(/usr/bin/time -f "\t%E MM:ss:mm" sh -c 'exec ls -R >/dev/null' 2>&1 tee); echo $result0:20.60 MM:ss:mm在这里我们将结果捕获为环境变量>echo $result0:20.60 MM:ss:mm最后我们到达:os.popen("/usr/bin/time -f '%E MM:ss:mm' sh -c 'exec ls -R >/dev/null' 2>&1 tee").read()执行输出:>python3Python 3.6.9 (default, Apr 18 2020, 01:56:04)[GCC 8.4.0] on linuxType "help", "copyright", "credits" or "license" for more information.>>> import os>>> os.popen("/usr/bin/time -f '%E MM:ss:mm' sh -c 'exec ls -R >/dev/null' 2>&1 tee").read()'0:19.89 MM:ss:mm\n'希望以上内容为您指明了正确的方向。

慕姐8265434

它适用于subprocess但注意/usr/bin/time使用 stderrimport subprocessproc = subprocess.Popen(["/usr/bin/time -f \"\t%E M:ss:mm, \t%P CPU\" ls -R"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)(out, err) = proc.communicate()print("program output:", err.decode("utf-8"))输出:program output:         0:00.00 M:ss:mm,        100% CPU

繁花如伊

这段代码在 python 2.7 上对我有用import osfrom datetime import datetimeCPU_Pct="Cpu Usage :"+str(round(float(os.popen('''grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage }' ''').readline()),2))+ "  time:" + datetim$print(CPU_Pct)输出会像5.74  time:2020-07-07 10:53:22如果你也想获得内存的使用,你可以将这一行添加到你的代码中tot_m, used_m, free_m = map(int, os.popen('free -t -m').readlines()[-1].split()[1:])最终代码可能是这样的:import osfrom datetime import datetimeCPU="|| CPU Usage :"+str(round(float(os.popen('''grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage }' ''').readline()),2))Time =  "||  time:" + datetime.now().strftime('%H:%M:%S')tot_m, used_m, free_m = map(int, os.popen('free -t -m').readlines()[-1].split()[1:])Memory ="|| memory :"+ str(used_m) +"/"+str(tot_m)print(Time + CPU+Memory)这是输出:||  time:11:02:33|| CPU Usage :5.74|| memory :13847/37529
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go