【发布时间】:2018-08-15 19:39:25
【问题描述】:
有没有一种简单的方法可以在 Python 代码的每个语句之间执行时间延迟(例如 time.sleep(3)),而不必在每个语句之间显式编写?
就像下面的 Python 脚本一样,它在 SAP GUI 窗口上执行某些操作。有时,脚本会在前一个语句完成之前继续执行下一个语句。因此,我必须在每个语句之间添加一个时间延迟,以便它正确执行。它正在处理时间延迟,但我最终在每行之间添加了time.sleep(3)。只是想知道是否有更好的方法?
import win32com.client
import time
sapgui = win32com.client.GetObject("SAPGUI").GetScriptingEngine
session = sapgui.FindById("ses[0]")
def add_record(employee_num, start_date, comp_code):
try:
time.sleep(3)
session.findById("wnd[0]/tbar[0]/okcd").text = "/npa40"
time.sleep(3)
session.findById("wnd[0]").sendVKey(0)
time.sleep(3)
session.findById("wnd[0]/usr/ctxtRP50G-PERNR").text = employee_num
time.sleep(3)
session.findById("wnd[0]").sendVKey(0)
time.sleep(3)
session.findById("wnd[0]/usr/ctxtRP50G-EINDA").text = start_date
time.sleep(3)
session.findById("wnd[0]/usr/tblSAPMP50ATC_MENU_EVENT/ctxtRP50G-WERKS[1,0]").text = comp_code
time.sleep(3)
session.findById("wnd[0]/usr/tblSAPMP50ATC_MENU_EVENT/ctxtRP50G-PERSG[2,0]").text = "1"
time.sleep(3)
session.findById("wnd[0]/usr/tblSAPMP50ATC_MENU_EVENT/ctxtRP50G-PERSK[3,0]").text = "U1"
time.sleep(3)
session.findById("wnd[0]/usr/tblSAPMP50ATC_MENU_EVENT").getAbsoluteRow(0).selected = True
time.sleep(3)
return "Pass"
except:
return "failed"
【问题讨论】:
-
你认为什么是“步骤”?
-
已更正,每一行代码
-
您会惊讶地发现,实际上只是为了完成一些表面上看起来非常简单的事情,比如作业。
-
感谢您告诉我们您的 X Y 问题。应该有更好的方法来做到这一点。请向我们展示您的一些麻烦代码!
-
另外,@chundu:您能否edit您最近对您的问题发表评论的信息?没有它,这个问题很容易被误解,因此到目前为止您收到的大多数答案并没有真正解决您的真正问题。