如何检查SAP Server是否正在运行python

问题描述 投票:0回答:1

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

subprocess.call("cmd /c  .\\VBScripts\\Login.vbs " + '"' + username + '" ' + '"' + password + '"')

但是,如果在不启动服务器窗口的情况下调用脚本,则脚本会停止并弹出。因此,我需要检查是否使用python建立了到特定SAP服务器的连接。

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

感谢,如果有人可以帮助以上。否则,建议一种更好的方法来处理上述情况。

enter image description here

python process sap rpa
1个回答
0
投票

为了解决您突出显示的问题(在启动它们的命令行中列出所有带有特定字符串的进程),我将wmic与PID和CommandLine参数一起使用,然后过滤所需的命令行字符串并获取其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:
                print line
                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)

此代码的一些限制:

  1. 它将仅查找正在运行的用户启动或拥有的进程。因此,以管理员身份运行以获取所有这些信息。
  2. 您将需要获取启动SAP进程的命令行的确切字符串。如果这不是唯一的,则上面的代码将无法满足您的要求。
  3. 该代码适用于Linux和Windows主机,只需将targ设置为win即可;如果不需要它们,则删除Linux的参数和逻辑。
  4. 要获取SAP流程的确切命令行,请打开任务管理器,选择“详细信息”,右键单击“名称”列标题并选择Select Columns,然后勾选Command Line,然后按OK。您的所有用户进程现在也应该显示其命令行参数。
  5. 在我的情况下,命令行是唯一的,但是如果您的进程具有其他定义特征,则可以将其用作过滤器,因此,请使用ProcessId,CommandLine代替使属性唯一的属性(例如Name或说明)。
© www.soinside.com 2019 - 2024. All rights reserved.