psutil获取进程的命令行信息时输出psutil.AccessDenied(),这个怎么处理?如何做判断
时间: 2024-05-06 19:19:39 浏览: 140
psutil.AccessDenied()表示当前用户没有足够的权限获取进程的命令行信息,可以尝试以下方式处理:
1. 以管理员身份运行程序,获取到足够的权限。
2. 尝试使用其他方式获取进程的命令行信息,例如通过WMI接口获取。
3. 判断是否有足够的权限获取进程的命令行信息,可以使用psutil.Popen()获取进程的PID,然后通过os.geteuid()获取当前用户的UID,再通过psutil.Process(pid).uids()获取进程的UID信息,判断当前用户是否具有读取该进程信息的权限。示例代码如下:
```python
import os
import psutil
pid = psutil.Popen(['python']).pid
uid = os.geteuid()
p_uid = psutil.Process(pid).uids()[0]
if uid == p_uid:
# 当前用户具有足够的权限
cmdline = psutil.Process(pid).cmdline()
else:
# 当前用户无法获取进程的命令行信息
print("Access denied.")
```
相关问题
psutil.as_dict()
`psutil.as_dict()`是一个方法,它可以返回一个包含当前系统进程的详细信息的字典。这个字典包含了诸如进程ID、父进程ID、进程名称、命令行参数、进程状态、CPU使用率、内存信息等等。以下是一个示例代码:
``` python
import psutil
processes = []
for proc in psutil.process_iter():
try:
processes.append(proc.as_dict(attrs=['pid', 'name', 'username']))
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
print(processes)
```
在这个示例中,我们使用psutil获取当前系统中所有进程的PID、名称和用户名,并将它们存储在一个字典列表中。请注意,`as_dict()`方法需要指定要返回的属性列表,否则它将返回所有可用的属性。
Python 判断桌面快捷方式是否打开
Python可以通过判断某个进程是否在运行来判断桌面快捷方式是否打开。具体方法如下:
1.使用`psutil`库获取系统中所有进程的信息。
2.遍历所有进程,查找与快捷方式对应的进程,例如Windows系统中,桌面快捷方式对应的进程是`explorer.exe`。
3.如果找到了对应的进程,则说明快捷方式已经打开;否则快捷方式未打开。
下面是示例代码:
```python
import psutil
def is_shortcut_open():
for proc in psutil.process_iter():
try:
# 获取进程信息
process_name = proc.name()
if process_name.lower() == 'explorer.exe':
# 判断是否为桌面进程
if 'shell:::{3080F90D-D7AD-11D9-BD98-0000947B0257}' in proc.cmdline():
return True
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
return False
if is_shortcut_open():
print('快捷方式已打开')
else:
print('快捷方式未打开')
```
在Windows系统中,`shell:::{3080F90D-D7AD-11D9-BD98-0000947B0257}`是桌面的CLSID,可以通过命令行输入`explorer.exe shell:::{3080F90D-D7AD-11D9-BD98-0000947B0257}`打开桌面。
阅读全文