检查列表中是否存在任何项目 (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()
我正在编写一个工具来获取 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()