zoukankan      html  css  js  c++  java
  • Python多进程控制SAP

    想通过Python控制SAP。基于下面的网址实现的。感谢NewJune 提供了很有用的信息。

    https://www.cnblogs.com/new-june/p/NewJune.html#commentform

     关于以下代码,先说结果: 基本没什么用。就是同时开了3个窗口,同时输入了ST03N,并回车。我还在想其他办法,比如开6个窗口多进程循环创建100个物料。

    下面的代码实现了,Python多进程的方式去调用SAP GUI。

    多进程multiprocessing

    在多线程里面使用win32com调用com组件的时候,需要用pythoncom.CoInitialize()初始化一下.

     1 import sys
     2 import win32com.client
     3 import time
     4 import pythoncom
     5 from multiprocessing import Pool
     6 from multiprocessing import freeze_support
     7 
     8 def call_sapgui(sessionID):
     9     try:
    10         SapGuiAuto = win32com.client.GetObject("SAPGUI")
    11         if not type(SapGuiAuto) == win32com.client.CDispatch:
    12             return
    13         application = SapGuiAuto.GetScriptingEngine
    14         if not type(application) == win32com.client.CDispatch:
    15             SapGuiAuto = None
    16             return
    17         connection = application.Children(0)
    18         if not type(connection) == win32com.client.CDispatch:
    19             application = None
    20             SapGuiAuto = None
    21             return
    22         session = connection.Children(sessionID)
    23         if not type(session) == win32com.client.CDispatch:
    24             connection = None
    25             application = None
    26             SapGuiAuto = None
    27             return
    28 
    29         session.findById("wnd[0]/tbar[0]/okcd").text = "/nst03n"
    30         session.findById("wnd[0]").sendVKey(0)
    31         session.findById("wnd[0]/shellcont/shell/shellcont[1]/shell").expandNode("B.999")
    32         session.findById("wnd[0]/shellcont/shell/shellcont[1]/shell").topNode = "B"
    33 
    34     except Exception as error_msg:
    35         with open("error.txt", "a+") as f:
    36             print(error_msg,file=f)
    37     finally:
    38         session = None
    39         connection = None
    40         application = None
    41         SapGuiAuto = None
    42 
    43 
    44 def Main():
    45     pythoncom.CoInitialize()
    46     po = Pool(3)#开启3个进程池
    47     for sessionID in range(3):
    48         po.apply_async(call_sapgui,(sessionID,))
    49     po.close() #关闭进程池,关闭后po不再接收新的请求。
    50     po.join() #等待po中所有子进程执行完成,必须放在close语句之后。
    51 
    52 if __name__ == "__main__":
    53     Main()
    View Code
  • 相关阅读:
    网站搜索功能lucene
    RabbitMQ消息队列
    zookeeper
    RPC+SOA+dubbo
    石英定时任务-quartz
    通用mapper、图片上传、nginx
    通用mapper和分类实现
    后台商品管理功能实现
    构建框架
    海量数据的并发处理
  • 原文地址:https://www.cnblogs.com/ken-yu/p/12803346.html
Copyright © 2011-2022 走看看