【发布时间】:2015-07-21 07:59:27
【问题描述】:
ps uaxw | egrep 'kms' | grep -v 'grep'
产量:
user1 8148 0.0 0.0 128988 3916 pts/8 S+ 18:34 0:00 kms
user2 11782 0.7 0.3 653568 56564 pts/14 Sl+ 20:29 0:01 kms
显然有两个进程在运行该程序。我想将此数字(此处为 2)存储为变量。关于如何在 python 中执行此操作的任何建议?
我尝试了以下方法:
procs = subprocess.check_output("ps uaxw | egrep 'kmns' |grep -v 'grep'",shell=True)
但我得到以下信息(我认为当作业当前未运行时,因此运行作业的进程数为零):
Traceback(最近一次调用最后一次):文件“”,第 1 行,in 文件“/usr/lib64/python2.7/subprocess.py”,第 573 行,在 检查输出 raise CalledProcessError(retcode, cmd, output=output) subprocess.CalledProcessError: Command 'ps uaxw | egrep 'kmns' |grep -v 'grep'' 返回非零退出状态 1
我该如何解决这个问题?
顺便说一句,这是我编写的用于检测我的系统是否繁忙的函数(这意味着如果 cpu 的数量 > 安装的总数量,并且负载 avg > 0.9 per cpu):
def busy():
import subprocess
output = subprocess.check_output("uptime", shell=False)
words = output.split()
sys.stderr.write("%s\n"%(output))
procs = subprocess.check_output("ps uaxw | egrep '(kmns)' | grep -v 'grep'", shell=True)
kmns_wrds = procs.split("\n")
wrds=words[9]
ldavg=float(wrds.strip(','))+0.8
sys.stderr.write("%s %s\n"%(ldavg,len(kmns_wrds)))
return max(ldavg, len(kmns_wrds)) > ncpus
上面的调用者:
def wait_til_free(myseconds):
while busy():
import time
import sys
time.sleep(myseconds)
""" sys.stderr.write("Waiting %s seconds\n"%(myseconds)) """
这基本上告诉系统在所有 cpu 被占用时等待。
有什么建议吗?
非常感谢!
【问题讨论】:
-
你为什么使用
egrep 'kms'而不仅仅是grep kms?另外,你为什么要向ps传递标志,而ps的唯一目的是在你不关心输出时向输出添加额外信息?
标签: python