2017-10-27 10 views
0

私のPythonスクリプトでは、otherscript.pyが現在(Linux)システム上で実行されているかどうかをチェックしたいと思います。 psutilライブラリは、良い解決策のように見えた:Pythonのコマンドでプロセスを見つける

import psutil 
proc_iter = psutil.process_iter(attrs=["name"]) 
other_script_running = any("otherscript.py" in p.info["name"] for p in proc_iter) 

問題はp.info["name"]が唯一のプロセスではなく、完全なコマンドの実行可能ファイルの名前を与えることです。したがって、システム上でpython otherscript.pyが実行された場合、p.info["name"]はそのプロセスではpythonになります。otherscript.pyが実行されているスクリプトであるかどうかをスクリプトは検出できません。

psutilなどのライブラリを使って簡単にチェックできますか?私はサブプロセスとしてpsコマンドを実行して、出力にotherscript.pyを探すことができますが、もっとエレガントなソリューションがあればそれを好むでしょう。

答えて

1

これは()、コマンドラインパラメータ()とexeファイル()の名前を検査第二の例を見てみましょう

import psutil 
proc_iter = psutil.process_iter(attrs=["pid", "name", "cmdline"]) 
other_script_running = any("otherscript.py" in p.info["cmdline"] for p in proc_iter) 
1

http://psutil.readthedocs.io/en/latest/#find-process-by-name を働くのだろうか。参考のため

import os 
import psutil 

def find_procs_by_name(name): 
    "Return a list of processes matching 'name'." 
    ls = [] 
    for p in psutil.process_iter(attrs=["name", "exe", "cmdline"]): 
     if name == p.info['name'] or \ 
       p.info['exe'] and os.path.basename(p.info['exe']) == name or \ 
       p.info['cmdline'] and p.info['cmdline'][0] == name: 
      ls.append(p) 
    return ls 
関連する問題