Python测试元素是否在字典中

时间:2014-10-17 03:09:55

标签: python python-3.x dictionary

我正在尝试让一个python程序调用notepad.exe它还没有运行。现在,我正在使用psutil和

pinfo = proc.as_dict(attrs=['name'])
if ("{'name': %s}"%SomeProcess) != str(pinfo):
   subprocess.call("%s"%SomeProcess, shell=True)

然而,这不会起作用,因为subprocess.call除了正在寻找的名字之外,还会呼叫列表中的每个名字。

知道如何使用subprocess和一些psutil我应该知道这一点,但是有没有办法看一下字典中是否有一行预设字符串和一行代码?像

这样的东西
pinfo = proc.as_dict(attrs=['name'])
if pinfo contains "somename":
   do something

如果可以,(99%肯定是。)可以在没有循环的情况下完成吗? (我想每隔一秒左右更新一次进程列表。)

谢谢!

修改

好吧,可能应该提供稍多的代码,因为这可能是相关的。

proc.as_dict()

本身不会做任何事情,所以我有一个" for" for"循环。

for proc in psutil.process_iter(): 
    pinfo = proc.as_dict(attrs=['name'])

我怎样才能改变它来输出字典而不是单行*,并且pinfo.get('somename')会在那个创建的字典上工作?

*如果我使用print(pinfo),则输出一行。类似于{'name': 'pythonw.exe'}

1 个答案:

答案 0 :(得分:0)

我想,你想做那样的事情:

names = set()
for proc in psutil.process_iter():
   names.add(proc.name())

if SomeProcess not in names:
   subprocess.call("%s"%SomeProcess, shell=True)

创建一个包含一个条目的字典并且您真正想要做的是扫描系统中的所有进程(我猜),这没有多大意义。所以你已经提到了iter,只有你的问题有点奇怪。使用集合(名称)可以使决策更加高效。你也可以在这里使用一个列表。