如何检查具有命令行参数的进程是否在Python中运行

时间:2013-12-21 17:42:02

标签: python command-line-arguments

我想检查一个脚本是否在python脚本中运行了特定的命令行参数。

例如,我想检查一下:

main.py testarg

正在运行。有什么方法可以实现这个目标吗?

提前致谢

5 个答案:

答案 0 :(得分:4)

您可以使用sys.argv列表:

import sys

if "testarg" in sys.argv:
    # do something

对于更复杂的参数解析,建议使用argparse


如果您希望搜索当前进程列表,则应使用psutil等库来确保最大的平台兼容性。

import psutil

for process in psutil.process_iter():
    cmdline = process.cmdline
    if "main.py" in cmdline and "testarg" in cmdline:
        # do something

答案 1 :(得分:4)

您可以使用psutil库。

import psutil

process_is_running = False

for process in psutil.process_iter():
    if process.cmdline == what_you_want:
        process_is_running = True

这几乎适用于任何操作系统,python 2.4最高可达3.3。

答案 2 :(得分:0)

这是我的看法:

import psutil

L=[(p.name(),p.cmdline()[1]) for p in psutil.process_iter() if p.name().startswith('py')]

现在,如果您打印此列表L:

('py.exe', 'programs\\pad29.py')
('python.exe', 'programs\\pad29.py')
('python.exe', '-u')
....
('python.exe', 'programs\\test_signal.py')

该列表包含名称为'py'的每个正在运行的进程的命令行参数。其中包括 python.exe py.exe 。此条件是必要条件,否则,如果尝试在每个运行的Windows进程(例如某些 smss.exe )上戳一下,可能会遇到一些 AccessDenied错误 。 有了此列表后,就可以轻松找到所需的内容:

t=['what_you_want' == m[1] for m in L]
answer=True in t

答案 3 :(得分:0)

当我想将特定过程与特定参数匹配时,这对我有帮助:

import psutil
for proc in psutil.process_iter():
    if ( proc.name().startswith('ruby')) and ("service-buffer.rb" in proc.cmdline()[1]) :
        print("match", proc.cmdline()[1])
    else:
        pass

答案 4 :(得分:0)

import psutil

for p in psutil.process_iter():
    try:   # else get PermissionError
        pid     = p.pid
        cmdline = p.cmdline()
        print(pid)
        for cmd in cmdline:
            print(cmd)
        print()
    except:
        pass