2014-02-20 3 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», а затем только сохранить, что «ПИД»

Надежда, что имеет смысл.

+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

Вы можете упростить свою жизнь, имея TaskList вернуться к вам список как 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

Хорошо работает, однако, t, похоже, автоматически делает мне PID из имени процесса, в котором я хочу. Я должен указать # строки. Допустим, что процесс в строке 7 называется fun.exe, и я хочу только PID, связанный с fun.exe, как это можно сделать? – user3331130

Смежные вопросы