2017-04-26 6 views
1

私の目標:各プロセスのPIDと名前を取得して辞書に戻す関数を作成する必要があります。私はこれをDjangoにアップロードし、本当に2つの異なる辞書が必要です。すべての実行されたプロセス名とPIDを持つ1つと、インストールされているすべての名前とPIDを持つものです。これまでは、辞書をうまく印刷して正しく返すことはできません。たぶん私はそれを間違って呼んでいるでしょう。私はこれに新しいです。プロセス辞書の作成

import psutil 
def pid_name(): 
    for proc in psutil.process_iter(): 
     try: 
      pinfo = proc.as_dict(attrs=['pid', 'name']) 
     except psutil.NoSuchProcess: 
      pass 
     else: 
      return pinfo 

印刷用に「返却」する場合は、dictが正常に印刷されます。そこからそのディクテーションを呼び出す方法は?それも正しく返されますか?

答えて

1

return文がforブロック内にあるため、最初の結果のみが返されます。重複するキーで辞書を作成することはできないため、代わりに辞書のリストを返す必要があります。すべてのプロセスを返すために、リスト内包してみてください:

import psutil 

def pid_name(): 
    return [proc.as_dict(attrs=['pid', 'name']) for proc in psutil.process_iter()] 

更新:

あなたがキーと値としてnameのようpid sの辞書を作成しようとしている場合は、それも簡単です:

def pid_name(): 
    return {proc.pid: proc.name() for proc in psutil.process_iter()} 
+0

ありがとうございます。しかし、実際のところ私の本当の問題は、結果の書式をどのようにして名前に関連付けられたIDにするかということです。そうすれば、私はdjangoのフィールドに値を入れることができます。私が試したすべてのことが私の上で間違っている – Joe

+0

'pid'sをキーに、' name'sを値として辞書を作成しようとしていますか?はいの場合は、私の更新を参照してください。 – Selcuk

+0

はい!私は今すぐそれを試みます!これはクラスのためであり、教師さえもあなたのコードがどれほど素晴らしいかに感心しました。それは「美しい」と言われました。ハハ。この割り当ては、Djangoサイトにデータを投稿することです。だから私はこれらの値を取る私のDjangoモデルに2つのフィールドを作成しようとしています。 – Joe