我正在使用SAP GUI脚本来自动化SAP。这些vb脚本使用以下命令调用。
subprocess.call("cmd /c .\\VBScripts\\Login.vbs " + '"' + username + '" ' + '"' + password + '"')
但是,如果在不启动服务器窗口的情况下调用脚本,则脚本会停止并弹出。因此,我需要检查是否使用python建立了到特定SAP服务器的连接。
决定检查流程列表中是否列出了SAP任务(在图中突出显示)。但是,我无法使用python列出这些子进程。
感谢,如果有人可以帮助以上。否则,建议一种更好的方法来处理上述情况。
为了解决您突出显示的问题(在启动它们的命令行中列出所有带有特定字符串的进程),我将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)
此代码的一些限制:
win
即可;如果不需要它们,则删除Linux的参数和逻辑。Select Columns
,然后勾选Command Line
,然后按OK。您的所有用户进程现在也应该显示其命令行参数。 ProcessId,CommandLine
代替使属性唯一的属性(例如Name或说明)。