Python Forum
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)
True 
Alternative 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 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)
True 
Alternative use psutil is good for this kind of stuff.
great 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"]
exist
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 to
I 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() Snooty


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'}