2017-05-19 2 views
-2

In der folgenden Code, Zuordnung von Anwendungsname zur Prozess-ID (hart codiert), Beispiel: In der folgenden Code 1468 ist die Prozess-ID und Outlook ist der Prozessname. In den hartcodierten Werten wurden für jede PID CPU-bezogene Informationen eingegeben. Hier möchte ich die Prozess-ID durch den Prozessnamen ersetzen und sollte die CPU-bezogenen Informationen für die entsprechende Prozessnamenausgabe erhalten, wie im Wertewörterbuch gezeigt.Problem beim Drucken Wörterbuch Inhalt

Erwartete Ausgabe

outlook: [ 
    233.625, 
    336.15625, 
    43791.0, 
    168.21875, 
    94.859375 
], 
chrome: [ 
    3713.625, 
    3396.15625, 
    36791.0, 
    628.21875, 
    48.859375 
], 
command prompt:[ 
    3713.625, 
    396.15625, 
    3791.0, 
    628.21875, 
    48.859375 
] 

tatsächliche Ausgang:

3796 
12972 
1468 
process name for this pid outlook 
{3796: [3713.625, 396.15625, 3791.0, 628.21875, 48.859375], 12972: [3713.625, 3396.15625, 36791.0, 628.21875, 48.859375], 1468: [233.625, 336.15625, 43791.0, 168.21875, 94.859375]} 

Code:

import os, platform, subprocess, re 
import sys 
import psutil 
import itertools 
import json 

#if __name__ == "__main__" : 
if True: 
    dict = {'1468 ': 'outlook', '12972':'chrome', '3796': 'command prompt'} 

    values ={ 
       1468 : [ 
        233.625, 
        336.15625, 
        43791.0, 
        168.21875, 
        94.859375 
       ], 
       12972: [ 
        3713.625, 
        3396.15625, 
        36791.0, 
        628.21875, 
        48.859375 
       ], 
       3796:[ 
        3713.625, 
        396.15625, 
        3791.0, 
        628.21875, 
        48.859375 
       ] 
      } 
class pretty: 
    def printf(self, json_object): 
     print(json.dumps(json_object, sort_keys=True, indent=4, separators= 
(',', ': '))) 

    def comparision(self): 
     for iter in values.keys(): 
      print (iter) 
     for proc in psutil.process_iter(): 
      if iter == proc.pid: 
       #print(iter) 
       print("process name for this pid" +" "+proc.name()) 
       if iter == proc.pid: 
        print(values) 

pretty.comparision("") 

Bitte helfen Sie mir dies bei der Lösung, bin ein Neuling in Python

+1

Was ist der Zweck der 'wenn Richtig: 'und die' schöne' Klasse? – timgeb

Antwort

1

Can‘ t tust du nur

for key in dict: 
    print (dict[key], ":", values[int(key)]) 

Ich kann mehr Erklärung hinzufügen, wenn das alles ist, was benötigt wird.

+0

Hallo danke, aber es sollte im JSON-Format anzeigen .. aber wenn ich Preety Klasse hinzufügen, bekomme ich Fehler wie pretty.printf (dict [Schlüssel], ":", Werte [int (Schlüssel)]) TypeError: printf() benötigt 2 Positionsargumente aber 3 wurden gegeben –

+0

@patricks: aber es sollte im JSON-Format angezeigt werden .. aber wenn ich Preety-Klasse hinzufügen bekomme ich Fehler wie pretty.printf (dict [Schlüssel], ":", Werte [int (key)]) TypeError: printf() nimmt 2 Positionsargumente aber 3 wurden gegeben - –

2

Vermeiden dict und values als Variablennamen verwenden, da sie dictionary Schlüsselwörter sind, und mit ihnen als Variablen zu unerwarteten Ergebnissen führen würde:

Verwendung:

dict1 = {'1468 ': 'outlook', '12972':'chrome', '3796': 'command prompt'} 
values1 ={ 
    1468 : [ 
     233.625, 
     336.15625, 
     43791.0, 
     168.21875, 
     94.859375 
    ], 
    12972: [ 
     3713.625, 
     3396.15625, 
     36791.0, 
     628.21875, 
     48.859375 
    ], 
    3796:[ 
     3713.625, 
     396.15625, 
     3791.0, 
     628.21875, 
     48.859375 
    ] 
} 

>>> res = {} 
>>> for key, value in dict1.items(): 
... res[dict1[key]] = values1[int(key)] 
... 
>>> res 
{'chrome': [3713.625, 3396.15625, 36791.0, 628.21875, 48.859375], 'outlook': [233.625, 336.15625, 43791.0, 168.21875, 94.859375], 'command prompt': [3713.625, 396.15625, 3791.0, 628.21875, 48.859375]} 
0
dict = {'1468': 'outlook', '12972':'chrome', '3796': 'command prompt'} 
values ={1468 : [233.625,336.15625,43791.0,168.21875,94.859375], 
12972: [3713.625,3396.15625,36791.0,628.21875,48.859375], 
3796:[3713.625,396.15625,3791.0,628.21875,48.859375]} 
new_dict={} 

for k in values.keys(): 
    new_dict[dict[str(k)]] = str(values[k]) 

print new_dict # this would give you a dictionary 
+0

Vielen Dank keval, aber ich sollte das Ergebnis im JSON-Format bekommen .. so pls tel, wie das –

+0

Wörterbuch zu lösen ist das gleiche wie json In diesem Fall, da Sie keine verschachtelten Schlüssel haben. – Keval