如何检查SAP服务器是否使用python运行

如何检查SAP服务器是否使用python运行,python,process,sap,rpa,Python,Process,Sap,Rpa,我正在使用sapgui脚本自动化SAP。使用以下命令调用这些vb脚本 subprocess.call("cmd /c .\\VBScripts\\Login.vbs " + '"' + username + '" ' + '"' + password + '"') 但是,当在服务器窗口未启动时调用脚本时,脚本会随着弹出窗口而停止。因此,我需要检查是否使用python建立了到特定SAP服务器的连接 决定检查SAP任务(在图像中突出显示)是否列在流程列表中。但是,我无法使用python列出这些子

我正在使用sapgui脚本自动化SAP。使用以下命令调用这些vb脚本

subprocess.call("cmd /c  .\\VBScripts\\Login.vbs " + '"' + username + '" ' + '"' + password + '"')
但是,当在服务器窗口未启动时调用脚本时,脚本会随着弹出窗口而停止。因此,我需要检查是否使用python建立了到特定SAP服务器的连接

决定检查SAP任务(在图像中突出显示)是否列在流程列表中。但是,我无法使用python列出这些子进程

如果有人能帮上忙,我将不胜感激。或者,建议一种更好的方法来处理上述情况


为了解决您提出的问题(在启动它们的命令行中列出具有特定字符串的所有进程),我使用带有PID和命令行参数的
wmic
,然后筛选所需的命令行字符串并获取其PID。下面我附加了一个片段,用于查找。还有一个杀死它们的功能

def get_running_processes(targ, name):
    pids = []
    if targ == 'win':
        cmd = "WMIC PROCESS get ProcessId,CommandLine"
    else:
        cmd = "ps a"
    proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
    for line in proc.stdout:
        if name in line:
            if targ == 'win':
                pid = line.strip().split()[-1]
            else:
                pid = line.strip().split()[0]
            pids.append(pid)
    if len(pids):
        print 'Found following pids for', name
        print [_ for _ in pids]
    else:
        print 'No processes with', name, 'detected running for this user'
    return pids


def kill_prev_instances(targ, pids):
    for _ in pids:
        if targ == 'win':
            kill_cmd = ['wmic', 'process', 'where', 'processid=' + str(_), 'call', 'terminate']
        else:
            kill_cmd = ['kill', '-9', str(_)]
        print 'Killing pid ' + str(_)
        subprocess.check_call(kill_cmd, shell=False)
        time.sleep(2)
此代码的一些限制:

  • 它将只查找由正在运行的用户启动或拥有的进程。因此,以管理员身份运行以获取所有这些文件
  • 您需要获得启动SAP进程的命令行的确切字符串。如果这不是唯一的,那么上面的代码将不会执行您需要它执行的操作
  • 该代码适用于Linux和Windows主机,只需将targ设置为
    win
    ,或者删除Linux的参数和逻辑(如果不需要)
  • 要获取SAP流程的确切命令行,请打开任务管理器,选择详细信息,右键单击名称列标题并选择
    select Columns
    ,然后勾选
    command line
    ,然后按OK。现在,用户的所有进程都应该显示其命令行参数
  • 在我的例子中,命令行是唯一的,但是如果您的流程有其他一些定义特性,那么您可以将其用作过滤器,因此使用使流程唯一的属性(如名称或描述)而不是
    ProcessId,CommandLine
  • 代码是为Python2.7编写的,但是如果删除/重写所有的print语句,应该可以在Python3上使用
  • 也就是说,仅仅检查一个进程是否运行命令行/名称等并不能保证该进程正常运行,并且可以接受登录请求。 为此,我将尝试使用支持SAP连接的Python模块。有关更多详细信息,请参阅本线程中给出的解决方案。

    如果右键单击
    SAP
    子进程,然后单击
    转到详细信息
    (或类似内容),是否有办法将会话与其他进程分开?不,它不提供此选项。只有[切换到、前置、最小化、最大化、结束任务]选项。