2014-02-20 203 views
3

我想从字符串中获取子字符串,但必须具体,但如果您使用此函数并打印它,您会得到一个长字符串
与所有当前没有响应的进程和他们的信息,我需要从特定进程的PID。如何从python中的字符串获取子字符串2

r = os.popen('tasklist /FI "STATUS eq Not Responding"').read().strip() 
print r 

例如,如果的chrome.exe没有响应,这将是在列表中,我想获得的PID与它相关联。我尝试了split()pop()来挑出我需要的东西,但没有成功。

编辑:
我有10多个进程共享相同的应用程序名称。 我需要使用PID并且它属于正确的应用程序。我不希望我的脚本也会杀死所有的东西。

因此,在短期我需要找到PID是在同一行指定的“PROCESS_NAME”,然后只保留该“PID”

希望是有道理的。

+0

请发布“所有当前没有响应的进程及其信息的长字符串”,并告诉我们您需要从该字符串中获得什么 – inspectorG4dget

+0

这有帮助吗? http://stackoverflow.com/questions/13507902/how-to-extract-a-specific-field-from-output-of-tasklist-on-the-windows-command-l –

回答

0

我认为有获取进程的PID仅适用的方法,但是如果你想知道如何从一个字符串使用正则表达式

提取特定字符串的正则表达式匹配PID:\w+\.\w+\s+(\d+)\s

import os 
import re 

r = os.popen('tasklist /FI "STATUS eq Not Responding"').read().strip() 
print re.findall('\w+\.\w+\s+(\d+)\s',r) 

输出:

['4024'] 
5

可以通过让任务列表返回到你的列表作为CSV简化你的生活:

C:\>tasklist /FI "STATUS eq Not Responding" /FO CSV /NH 
"jusched.exe","3596","Console","1","13,352 K" 
"chrome.exe","4760","Console","1","181,088 K" 
"chrome.exe","3456","Console","1","119,044 K" 
"chrome.exe","2432","Console","1","24,236 K" 
"chrome.exe","440","Console","1","36,420 K" 
"chrome.exe","4964","Console","1","60,596 K" 
"chrome.exe","3608","Console","1","21,924 K" 
"chrome.exe","4996","Console","1","22,348 K" 
"chrome.exe","2580","Console","1","38,432 K" 
"chrome.exe","3312","Console","1","32,756 K" 
"chrome.exe","4600","Console","1","36,072 K" 
"chrome.exe","4180","Console","1","24,436 K" 
"chrome.exe","4320","Console","1","31,152 K" 
"chrome.exe","4120","Console","1","22,632 K" 

csv模块利用这个,你现在有:

>>> r = os.popen('tasklist /FI "STATUS eq Not Responding" /FO CSV') 
>>> import csv 
>>> reader = csv.DictReader(r, delimiter=',') 
>>> rows = list(reader) 
>>> rows[0] 
{'Session Name': 'Console', 'Mem Usage': '13,352 K', 'PID': '3596', 'Image Name' 
: 'jusched.exe', 'Session#': '1'} 
>>> rows[0]['PID'] 
'3596' 

我摆脱/NH切换(无标题)从csv模块获取字典。

+0

工作得很好,但是,我可以'似乎使它自动从我想要的进程名称中获得PID。我必须指定该行的#号。假设第7行的进程名为fun.exe,并且我只想要与'fun.exe'关联的PID,那么该怎么做? – user3331130

相关问题