1

我正在编写一个 Python 脚本,用于获取有关 PC 上运行的进程(PID、命令行等)的信息。

在我的 Windows 7 PC 上,我可以使用“wmic”并使用它的输出:

output = subprocess.Popen(['wmic process get creationdate,commandline,processid'], stdout=subprocess.PIPE, shell=True).communicate()[0]

我可以从此输出中获得的信息示例:

进程 PID 开始时间命令:blah.exe 1234 Thu Jun 06 15:33:40 2013 C:\blah\blah.exe -a -b blah.txt

这为我提供了我需要的所有信息......但是,并非所有机器都会让我使用“wmic”,因为我不是管理员。

我可以使用“任务列表”,但它没有给我 wmic 提供的“命令行”信息。

我不能使用“psutils”(或“wmi”模块),因为它没有安装在我需要它工作的任何 PC 上,我不想在所有这些 PC 上安装管理员安装模块

关于如何使用标准 Python 2.6 获取上述过程信息的任何想法?

在此先感谢,尼克

Windows XP/7 上的 Python 2.6

==================================================== ====================

编辑(2013 年 6 月 12 日):

我正在尝试按照下面的建议进行操作,但是遇到了麻烦...我已将 psutil 目录(psutil-0.7.1)与我的脚本放在同一目录中,并将以下内容添加到我的脚本中:

路径 = '.\psutil-0.7.1'

sys.path.append(路径)

导入psutil

我现在收到以下错误:

回溯(最近一次通话最后):

  File "C:\Users\nickw\Desktop\ProcessMonitor\ProcessMonitor_MODPS2.py", line 21, in <module>

    import psutil

  File ".\psutil-0.7.1\psutil\__init__.py", line 77, in <module>

    import psutil._psmswindows as _psplatform

  File ".\psutil-0.7.1\psutil\_psmswindows.py", line 15, in <module>

     import _psutil_mswindows

ImportError: No module named _psutil_mswindows

知道我做错了什么吗?

4

1 回答 1

0

检索进程命令行的技术有点老套,但从 XP 开始就包含在 WMI 中。基本上,它正在读取另一个进程的内存。有关详细信息,请参阅例如在 Windows 中获取另一个进程命令行和链接。

所以,你要么

  • 手动重新实现它,使用ctypes或其他方式,就像上面的链接所说的那样,或者

  • 不知何故,利用现有的模块来为你做这件事。这是zipimport为了让多个文件更容易做到这一点,并virtualenv在文件系统的任何地方创建整个环境,后者可能是一种矫枉过正。

于 2013-06-13T00:42:58.017 回答