检查列表中是否存在任何项目 (python)

check if any item exist in the list (python)

我正在编写一个工具来获取 windows 进程的列表......然后搜索任何互联网浏览器(进程名称),如 chrome.exe , opera.exe ....等如果找到其中一个然后做一些事情......如果不只是打印什么也没找到 我的代码:

import os 
import time

def qa():
    home = os.environ.get("HOMEDRIVE")
    lol =home +"/"
    mycurrent = os.getcwd()
    change = os.chdir(lol)
    mycurrent = os.getcwd()



    d = os.popen("""wmic process get name | findstr /v "Name 'System Idle Process' System""").read().lower()

    lists = ["opera.exe" , "chrome.exe" , "iexplore.exe" , "firefox.exe" , "microsoftedgecp.exe"]
    for q in lists:

        if any(item in q for item in d) :


            qassam = os.popen("dir /s /b {}".format(lists[1])).read().strip()
            print qassam
            dir1 = os.path.dirname(qassam)
            print dir1


            #CreateShortCut_to_Desktop(qassam , dir1)
            print time.time()




        else:
            print "nothing found"
            break
qa()

我杀死了所有的浏览器进程并且我 运行 它应该没有给我任何发现的代码但是......他保持循环并且 运行 这个代码块:

 qassam = os.popen("dir /s /b {}".format(lists[1])).read().strip()
            print qassam
            dir1 = os.path.dirname(qassam)
            print dir1


            #CreateShortCut_to_Desktop(qassam , dir1)
            print time.time()

这是我的输出:

C:\Program Files (x86)\Google\Chrome\Application\chrome.exe C:\Program Files (x86)\Google\Chrome\Application 1538829033.16 C:\Program Files (x86)\Google\Chrome\Application\chrome.exe C:\Program Files (x86)\Google\Chrome\Application 1538829041.34 C:\Program Files (x86)\Google\Chrome\Application\chrome.exe C:\Program Files (x86)\Google\Chrome\Application 1538829048.94 C:\Program Files (x86)\Google\Chrome\Application\chrome.exe C:\Program Files (x86)\Google\Chrome\Application

if any(item in q for item in d) :并没有按照您的想法去做。

您的 if 命令的问题是您首先有一个 for 循环。 q 是您要检查的单个字符串,因此 item in q 实际上是在检查字符串(作为对象字符串)是否在 q 字符串的元素之一内(所以一个接一个地检查元素),这是行不通的。我建议拆分每个测试的字符串以保留文件名。

for item in d也不是你想的那样。它也在字符串中一个字符接一个字符地循环。您可能想先拆分字符串,因此最终结果可能类似于:

d = os.popen("""wmic process get name | findstr /v "Name 'System Idle Process' System""").read().lower().split()

lists = ["opera.exe" , "chrome.exe" , "iexplore.exe" , "firefox.exe" , "microsoftedgecp.exe"]
if any(item.split(os.sep)[-1] in lists for item in d) :

可能不完美,但这是一个开始。

您可能希望在 'os.popen(...).read().split('\n')

等换行符上拆分 os.popen(...).read() 的结果

这样你就有了一个字符串列表,而不是一个长字符串。

我也改了你的if逻辑。将来使用比 'd' 和 'q' 更具描述性的变量名称。希望这对您有所帮助!

我没有windows,所以我没有测试过。

import os 
import time

def qa():
    home = os.environ.get("HOMEDRIVE")
    lol =home +"/"
    mycurrent = os.getcwd()
    change = os.chdir(lol)
    mycurrent = os.getcwd()

    d = os.popen("""wmic process get name | findstr /v "Name 'System Idle Process' System""").read().lower().split('\n')
    print('proc count',len(d))

    lists = ["opera.exe" , "chrome.exe" , "iexplore.exe" , "firefox.exe" , "microsoftedgecp.exe"]
    for q in lists:

        #if any(item in q for item in d) :
        if q in d:
            print('proc',d,'browser',q)

            qassam = os.popen("dir /s /b {}".format(lists[1])).read().strip()
            print qassam
            dir1 = os.path.dirname(qassam)
            print dir1


            #CreateShortCut_to_Desktop(qassam , dir1)
            print time.time()




        else:
            print "nothing found"
            break
qa()