我想检查一个脚本是否在python脚本中运行了特定的命令行参数。
例如,我想检查一下:
main.py testarg
正在运行。有什么方法可以实现这个目标吗?
提前致谢
答案 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