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

时间:2018-10-07 08:43:14

标签: python list loops process wmic

im编码了一种工具,以获取Windows进程的列表...,然后搜索任何Internet浏览器(进程名称),例如chrome.exe,opera.exe...。 ..如果不打印任何内容 我的代码:

babel

我杀死了所有浏览器进程,我运行了代码,它应该不会给我任何东西,但是...他保持循环并运行此代码块:

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()

这是我的输出:

  

C:\ Program Files(x86)\ Google \ Chrome \ Application \ chrome.exe C:\ Program   文件(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文件(x86)\ Google \ Chrome \ Application \ chrome.exe C:\ Program文件   (x86)\ Google \ Chrome \ Application   1538829048.94 C:\ Program文件(x86)\ Google \ Chrome \ Application \ chrome.exe C:\ Program文件   (x86)\ Google \ Chrome \ Application

2 个答案:

答案 0 :(得分:0)

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) : 也没有按照您的想法做。它也会在字符串的另一个int之后循环一个字符。您可能要先分割字符串,所以最终结果可能类似于:

{{1}}

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

答案 1 :(得分:0)

您可能想在诸如'os.popen(...)。read()。split('\ n')之类的换行符上拆分os.popen(...).read()的结果

这样,您将拥有一个字符串列表,而不是一个长字符串。

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

我没有窗户,所以还没有测试。

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()