проверить, существует ли какой-либо элемент в списке (python) - PullRequest
0 голосов
/ 07 октября 2018

я кодирую инструмент, чтобы получить список процессов 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

1 Ответ

0 голосов
/ 07 октября 2018

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

Может быть не идеальным, но это начало.

...