2014-02-20 52 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

相關問題