zoukankan      html  css  js  c++  java
  • cmd,py脚本,py编译的exe,uipath及uibot对它们的调用

    UIPATH调用Python编译程序exe

    好处:
    1)code不以可编辑的状态被用户接触,对于不懂反编译的一般用户,可提升一定的代码安全性;
    2)不需要用户机器上安装 python环境。
    3)可以将能够执行不同任务的脚本编译成同一个exe程序,通过传入不同参数实现不同任务。

    1).生成并调用单任务 exe程序:
    详见之前的博客:https://blog.csdn.net/qq_24937551/article/details/105517535
    1. 准备单任务python脚本 2. 将仅执行单任务的脚本打包成exe 3. UIPATH调用exe
    2).生成并调用多任务 exe程序:
    1. 准备多任务python脚本 2. 将可执行多任务的脚本打包成exe 3. UIPATH调用exe
    2. UIPATH 调用 exe或者python脚本,实际上是使用vb.net来调用cmd命令行来执行exe或脚本,所以难点在于参数的传递和解析,尤其是当脚本中的函数需要多种类型的参数,比如位置参数,关键字参数等。
    import numpy as np
    import pandas as pd
    from pandas import DataFrame,Series
    import sys,getopt  # 用来解析参数的两个库
    
    class HandleData():
        def __init__(self,process_name,log_path='',excel_path='',new_excel_path=''):
            self.process_name=process_name
            self.log_path=log_path
            self.excel_path=excel_path
            self.new_excel_path=new_excel_path
    
        def deal_with_data(self):
            file_obj=open(self.excel_path)
            df=pd.read_csv(file_obj)
            # df=pd.read_csv(self.excel_path)
            df=df.reindex(columns=['CNUM','COMPANY','C_col','D_col','E_col','F_col','G_col','H_col'],fill_value=None)
            df.rename(columns={'COMPANY':'Company_New'}, inplace = True)
            df=df.dropna(axis=0,how='all')
            df['CNUM'] = df['CNUM'].astype('int32')
            df = df.drop_duplicates(subset=['CNUM', 'Company_New'], keep='first')
    
            df.to_csv(self.new_excel_path,index=False,encoding='GBK')
            file_obj.close()
    
        def writeLog(self):
            with open(self.log_path,"a") as logfile:
                logfile.write("
    that's a test log message")
            
        def writeEventLog(self):
            with open(r"C:Users12078DesktopUIPATH_test419EventLogs_Bot1.txt","a") as logfile:
                logfile.write("
    no function found" + self.process_name)
             
        def mainprocess(self):
            if self.process_name=="deal_with_data":
               HandleData.deal_with_data(self)
            elif self.process_name=="writeLog":
               HandleData.writeLog(self)
            else:
               HandleData.writeEventLog(self)
    
    if __name__ == "__main__":
        process_name=""
        log_path = ""
        excel_path = ""
        new_excel_path = ""
        argv=sys.argv[1:]
        try:
            opts,args = getopt.getopt(argv,"h",["process_name=","log_path=","excel_path=","new_excel_path="])
        except getopt.GetoptError:
            print('cnum_company_data0418.py --process_name processname str --log_path logpath str --excel_path datafilepath str --new_excel_path outputfilepath str')
            sys.exit(2)
        for opt, arg in opts:
            if opt == "-h":
                print('cnum_company_data0418.py --process_name processname str --log_path logpath str --excel_path datafilepath str --new_excel_path outputfilepath str')
                sys.exit()
            elif opt == "--process_name":
                process_name = arg
            elif opt == "--log_path":
                log_path = arg
            elif opt =="--excel_path":
                excel_path = arg
            elif opt =="--new_excel_path":
                new_excel_path = arg
        # print(process_name + "--"+log_path+"--"+excel_path+"--"+new_excel_path+"")
        handle=HandleData(process_name,log_path,excel_path,new_excel_path)
        handle.mainprocess()
    
    
    cmd执行python脚本测试效果:
    1. 测试生成log message的功能:
      C:Users12078DesktopUIPATH_test419>python cnum_company_data0419.py --process_name=writeLog --log_path=C:Users12078DesktopUIPATH_test419mylog.txt

    2. 测试处理excel/csv数据的功能:
      C:Users12078DesktopUIPATH_test419>python cnum_company_data0419.py --process_name=deal_with_data --excel_path=C:Users12078DesktopUIPATH_test419CNUM_COMPANY.csv --new_excel_path=C:Users12078DesktopUIPATH_test419out.csv

    经过测试,脚本没有问题

    以上程序也可以这样实现:(知识点:面向对象,反射,元组解包,不定长参数的函数)
    # -*- coding: UTF-8 -*-
    import pandas as pd
    import sys
    from pandas import DataFrame,Series
    
    class HandleData():
    
        def deal_with_data(self,paths):
            excel_path,new_excel_path=paths
            file_obj=open(excel_path)
            df=pd.read_csv(file_obj)
            df=df.reindex(columns=['CNUM','COMPANY','C_col','D_col','E_col','F_col','G_col','H_col'],fill_value=None)
            df.rename(columns={'COMPANY':'Company_New'}, inplace = True)
            df=df.dropna(axis=0,how='all')
            df['CNUM'] = df['CNUM'].astype('int32')
            df = df.drop_duplicates(subset=['CNUM', 'Company_New'], keep='first')
            df.to_csv(new_excel_path,index=False,encoding='GBK')
            file_obj.close()
    
        def writeLog(self,log_path):
            log_path=log_path[0]
            with open(log_path,"a") as logfile:
                logfile.write("
    that's a test log message")
            
        def writeEventLog(self,p):
            process_name,content=p
            with open(r"C:Users12078Desktopuibotpytest_mutiply.txt","a") as logfile:
                logfile.write("
    no function found" + process_name+"--"+content)
             
            
    def main(f,*args):  # *args表示不定长参数,会将不定长参数打包成元组 args
        h=HandleData()
        if hasattr(h,f):
            getattr(h,f)(args)
        
        
    if __name__ == "__main__":
        # 测试 writeEventLog
        # main('writeEventLog','fuc_test','ttesthahah')  
        # 测试 writeLog
        # main('writeLog',r"C:Users12078Desktopuibotlog_test.txt")
        # 测试 deal_with_data
        # main('deal_with_data',r"C:Users12078DesktopuibotpytestCNUM_COMPANY.csv",r"C:Users12078Desktopuibotpytestoutput.csv")
    
        # cmd 执行脚本时:
        fuc_name=sys.argv[1]
        argvs=sys.argv[2:]
        main(fuc_name,*argvs)  # *argvs表示解包列表,将列表元素转为独立的个体
    
    cmd执行上面的python脚本测试效果:
    1. 测试生成log message的功能:
      C:Users12078>python C:Users12078Desktopuibotpytestpydatahandle.py writeEventLog fuc_test testhahah
      C:Users12078>python C:Users12078Desktopuibotpytestpydatahandle.py writeLog C:Users12078Desktopuibotmylog.txt

    2. 测试处理excel/csv数据的功能:
      C:Users12078>python C:Users12078Desktopuibotpytestpydatahandle.py deal_with_data C:Users12078DesktopuibotpytestCNUM_COMPANY.csv C:Users12078Desktopuibotpytestout.csv

    经过测试,脚本没有问题

    cmd执行exe编译任务:

    cd C:Users12078DesktopUIPATH_test419
    C:Users12078DesktopUIPATH_test419>pyinstaller cnum_company_data0419.py
    或:
    cd C:Users12078Desktopuibotpytest
    C:Users12078Desktopuibotpytest>pyinstaller pydatahandle.py
    使用 dist目录下的 exe程序

    UIPATH调用 exe执行多任务:

    1.总体框架:在这里插入图片描述
    在这里插入图片描述

    2.第1次调用exe完成第一个任务:在这里插入图片描述
    在这里插入图片描述

    3.第2次调用 exe完成第二个任务:

    在这里插入图片描述
    在这里插入图片描述

    4.执行结果:

    在这里插入图片描述
    在这里插入图片描述

    CMD调用 python编译的exe:

    C:Users12078>start C:Users12078Desktopuibotpytestdistpydatahandlepydatahandle.exe writeEventLog fuc_test testhahah
    C:Users12078>start C:Users12078Desktopuibotpytestdistpydatahandlepydatahandle.exe deal_with_data C:Users12078DesktopuibotpytestCNUM_COMPANY.csv C:Users12078Desktopuibotpytestout.csv

    Uibot有启动应用程序的功能,但没有传入参数的设置,可以这样做:uibot调用 cmd,cmd执行启动 exe并传入参数的命令:


    说明

    1.Author: Collin_PXY ; wechat: pxy123abc

  • 相关阅读:
    java集合源码
    数据库表链接的几种方式
    面试题(RabbitMQ)
    常见面试题(Redis)
    某奥笔试题
    Servlet
    1——Django的基础及环境搭建
    6.13---example
    6.12---知道参数的重要性------插入数据-删除数据-修改数据注意Map
    6.12---前提两个对象的成员必须一致,才能将有数据的对象将数据传给反射获取的对象conver(有数据对象,目标对象)
  • 原文地址:https://www.cnblogs.com/Collin-pxy/p/13227861.html
Copyright © 2011-2022 走看看