find any item in the list - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: find any item in the list (/thread-13260.html) |
find any item in the list - evilcode1 - Oct-07-2018 hello all ... im coding a program to get the internet browsers names and dir's from the windows if he found the process ... this is my code : import os import time def q(): 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 q()the d variable run this command (wmic process get name | findstr /v "Name 'System Idle Process' System) on the system to get all the process ... i need to modify the code search in this process if he found any item from list name lists[] then run this lines : qassam = os.popen("dir /s /b {}".format(lists[1])).read().strip() print qassam dir1 = os.path.dirname(qassam) print dir1 if he did not found any browser just print found nothing RE: find any item in the list - snippsat - Oct-07-2018 You have to clean up what you get from d = os.popen .d will be a big sting with mixed in \n \r and empty stings.You should use subprocess,and not os.popen() which is deprecated.Quote:Deprecated since version 2.6: All of the os.popen*() functions are obsolete. Use the subprocess module. If doing it subprocess and can use check_output to get output.Ideally would like to remove shell=True ,but command did like to be spilt out to a list. import subprocess pro = subprocess.check_output("""wmic process get name | findstr /v "Name 'System Idle Process' System""", shell=True) pro_string = pro.decode('utf-8') lst = [] for item in pro_string.split('\r'): lst.append(item.strip()) process_list = filter(None, lst) process_list = list(process_list) #print(process_list)Test output,see now that have clean up list with processes. >>> process_list[:6] ['Registry', 'smss.exe', 'csrss.exe', 'wininit.exe', 'csrss.exe', 'winlogon.exe'] >>> pro_find = ['chrome.exe', 'smss.exe'] >>> any(p in process_list for p in pro_find) TrueAlternative use psutil is good for this kind of stuff. RE: find any item in the list - evilcode1 - Oct-07-2018 (Oct-07-2018, 09:45 AM)snippsat Wrote: You have to clean up what you get fromgreat its working but now how i cant now which of pro_find = ["opera.exe" , "chrome.exe" , "iexplore.exe" , "firefox.exe" , "microsoftedgecp.exe"] exist and pass it name to qassam = os.popen("dir /s /b {}".format("pass the process name founded from the list ")).read().strip() RE: find any item in the list - snippsat - Oct-07-2018 (Oct-07-2018, 09:58 AM)evilcode1 Wrote: great its working but now how i cant now which of pro_find = ["opera.exe" , "chrome.exe" , "iexplore.exe" , "firefox.exe" , "microsoftedgecp.exe"]Can compare lists, set() is best as there can be several process with same name.>>> process_list[:6] ['Registry', 'smss.exe', 'csrss.exe', 'wininit.exe', 'csrss.exe', 'winlogon.exe'] >>> pro_find = ['csrss.exe', 'smss.exe', "firefox.exe"] >>> p = set(pro_find) & set(process_list) >>> p {'csrss.exe', 'smss.exe'}So firefox.exe is not running. Quote:exist and pass it name toI don't understand what you try to do here,it just process names a dir will not work without a absolute path.Should you be using os.popen()
RE: find any item in the list - evilcode1 - Oct-08-2018 i will explain in details .... lets say i run chrome.exe and the code found that im running chrome .. how i can print which of ["opera.exe" , "chrome.exe" , "iexplore.exe" , "firefox.exe" , "microsoftedgecp.exe"] found !! i mean i need to print the name of process from the list that the code found it running not a position i hope u understand me RE: find any item in the list - snippsat - Oct-08-2018 Doesn't may example not do what you explain? Let take you list and run on my system now. >>> pro_find = ["opera.exe" , "chrome.exe" , "iexplore.exe" , "firefox.exe" , "microsoftedgecp.exe"] >>> p = set(pro_find) & set(process_list) >>> p {'chrome.exe'}So it find that i have Chrome running,and none of the other is running. If i start FireFox. >>> p = set(pro_find) & set(process_list) >>> p {'firefox.exe', 'chrome.exe'}What's not running. >>> p = set(pro_find) - set(process_list) >>> p {'opera.exe', 'microsoftedgecp.exe', 'iexplore.exe'} |