1

I have 4 .bat-files in the Windows autostart folder for starting the programs Sabnzbd, CouchPotato, SickBeard and Headphones together with Windows. In these batch files I run the Python .py file through a line like this:

start "SABnzbd" pythonw "C:\SABnzbd\SABnzbd.py"

After all 4 programs have been started and are running I can see them in the WIndows task manager. However I cannot identify the separate processes. They all identify as pythonw.exe *32 with the description pythonw.exe:

enter image description here

What I'm trying to do is identifying every program. Do you have any idea how to do that? Could this be done by adding a parameter in the bat file? Or should I do something completely different?

4

5 回答 5

3

我建议使用 python 的WMI 包(见这个答案):

import wmi

c = wmi.WMI ()
for process in [p for p in c.Win32_Process () if p.Name == 'pythonw.exe']:
    print process.ProcessId, process.CommandLine
于 2013-06-30T11:26:18.870 回答
0

在批处理中,您可以通过 wmic.exe(WMI 控制台)访问 WMI

wmic Path Win32_Process where Name='pythonw.exe' get ProcessId,CommandLine

内置函数的第一个引用参数start设置窗口标题。通过查看进程不容易访问 GUI 功能。有 Win32 API 可以做到这一点(我们为此使用AutoIt ),但在本地,我不知道它有多容易。

于 2013-07-01T03:33:13.637 回答
0

我自己解决了。

我一直很愚蠢,我发现我可以在任务管理器的进程选项卡中添加列。可用的列之一是Command line,该列准确显示了我在 .bat 文件中放入的内容,包括路径,路径显示了进程是什么程序。

由于@Ansgar Wiechers 的回答,我一直在寻找显示命令行

于 2013-09-01T21:39:46.237 回答
0

您可以使用tasklist和过滤输出以获取与给定名称相关的所有进程 ID (PID):

import os
def processes(name):
    os.system('tasklist /FI "IMAGENAME eq %s" > tmp.txt' % name)
    tmp = open('tmp.txt', 'r')
    return [int(i.split()[1]) for i in tmp.readlines()[3:]]

然后你可以使用pid:

pids = processes('pythonw.exe') # <-- the name must be exact
于 2013-06-30T10:54:33.610 回答
0

使用 Pyinstaller 将 python 脚本文件冻结为 exe 文件。

然后,您可以通过为它们指定不同的 exe 文件名来识别这些进程。例如 Sabnzbd.exe、CouchPotato.exe 等。

更重要的是,不需要在客户端机器上安装 python 解释器,因为你提供了一个 exe 文件

于 2013-06-30T11:29:55.087 回答