我使用此脚本登录SAP会话:
from subprocess import call
import win32com.client
import time
import os
GUIPath = 'C:/Program Files (x86)/SAP/FrontEnd/SAPgui/'
WinTitle = 'SAP'
Name = """PRD"""
SID = 'PRD'
InstanceNo = '01'
shell = win32com.client.Dispatch("WScript.Shell")
call(os.path.join(GUIPath, 'SAPgui.exe') + " " + Name + " " + InstanceNo)
但是,它总是返回错误:
hostname 'PRD' unknown
check you application server name
有谁知道如何解决这个问题?谢谢
变量Name必须是"PRD"
(字符串本身必须包含双引号)。Python认为与之Name = """PRD"""
相同,Name = "PRD"
因此不正确,因为变量Name仅包含PRD
(缺少双引号)。
因此,需要使用字符串反斜杠(Name = "\"PRD\""
或此处提到的其他可能性)来维护变量Name中的双引号。
完整的代码:
from subprocess import call
import win32com.client
import time
import os
GUIPath = 'C:/Program Files (x86)/SAP/FrontEnd/SAPgui/'
WinTitle = 'SAP'
Name = "\"PRD\""
SID = 'PRD'
InstanceNo = '01'
shell = win32com.client.Dispatch("WScript.Shell")
call(os.path.join(GUIPath, 'SAPgui.exe') + " " + Name + " " + InstanceNo)
感谢您的反馈。关于
sapgui.exe
,我认为它只接受主机名或IP地址作为第一个参数,但是如果它在双引号之间,则还接受登录条目描述。我尝试了此PowerShell,它的工作原理是:&"C:\Program Files (x86)\SAP\FrontEnd\SAPgui\sapgui.exe" '"Dev system"'
。它接受了Dev system
我在SAP Logon应用程序中定义的登录条目。它必须是登录条目的准确描述(而不是系统ID)。区分大小写。SAP没有在注释103019中描述此功能。顺便说一句,您已将登录条目(因为它位于双引号之间)作为sapgui.exe的第一个参数传递,因此忽略了实例号(您的第二个参数)传递,如我先前的注释中所示。
是,对的。任何实例都将被接受。顺便说一句,我尝试使用“消息服务器”的IP地址,但是没有用。您使用的是“消息服务器”的相同IP地址还是什么?您能否显示完整脚本以通过IP地址使用PowerShell访问SAP?
请问另一个问题(简短的回答:否,调度程序(dp)。如果要使用消息服务器(ms),则注释103019中的可能性很小:(
/R/<SID>/G/<logon group>
例如,“ / R / ERP / G / PUBLIC”),/M/<message server>/S/<message server port>/G/<logon group>
(例如“ /M/server.domain/S/1080/G/PUBLIC”)/R/<SID>/M/<message server>/G/<logon group>
(例如“ /R/ERP/M/server.domain/G/PUBLIC”等)