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或脚本,所以难点在于参数的传递和解析,尤其是当脚本中的函数需要多种类型的参数,比如位置参数,关键字参数等。
  1. import numpy as np
  2. import pandas as pd
  3. from pandas import DataFrame,Series
  4. import sys,getopt # 用来解析参数的两个库
  5. class HandleData():
  6. def __init__(self,process_name,log_path='',excel_path='',new_excel_path=''):
  7. self.process_name=process_name
  8. self.log_path=log_path
  9. self.excel_path=excel_path
  10. self.new_excel_path=new_excel_path
  11. def deal_with_data(self):
  12. file_obj=open(self.excel_path)
  13. df=pd.read_csv(file_obj)
  14. # df=pd.read_csv(self.excel_path)
  15. df=df.reindex(columns=['CNUM','COMPANY','C_col','D_col','E_col','F_col','G_col','H_col'],fill_value=None)
  16. df.rename(columns={'COMPANY':'Company_New'}, inplace = True)
  17. df=df.dropna(axis=0,how='all')
  18. df['CNUM'] = df['CNUM'].astype('int32')
  19. df = df.drop_duplicates(subset=['CNUM', 'Company_New'], keep='first')
  20. df.to_csv(self.new_excel_path,index=False,encoding='GBK')
  21. file_obj.close()
  22. def writeLog(self):
  23. with open(self.log_path,"a") as logfile:
  24. logfile.write("\nthat's a test log message")
  25. def writeEventLog(self):
  26. with open(r"C:\Users\12078\Desktop\UIPATH_test\0419\EventLogs_Bot1.txt","a") as logfile:
  27. logfile.write("\nno function found" + self.process_name)
  28. def mainprocess(self):
  29. if self.process_name=="deal_with_data":
  30. HandleData.deal_with_data(self)
  31. elif self.process_name=="writeLog":
  32. HandleData.writeLog(self)
  33. else:
  34. HandleData.writeEventLog(self)
  35. if __name__ == "__main__":
  36. process_name=""
  37. log_path = ""
  38. excel_path = ""
  39. new_excel_path = ""
  40. argv=sys.argv[1:]
  41. try:
  42. opts,args = getopt.getopt(argv,"h",["process_name=","log_path=","excel_path=","new_excel_path="])
  43. except getopt.GetoptError:
  44. print('cnum_company_data0418.py --process_name processname str --log_path logpath str --excel_path datafilepath str --new_excel_path outputfilepath str')
  45. sys.exit(2)
  46. for opt, arg in opts:
  47. if opt == "-h":
  48. print('cnum_company_data0418.py --process_name processname str --log_path logpath str --excel_path datafilepath str --new_excel_path outputfilepath str')
  49. sys.exit()
  50. elif opt == "--process_name":
  51. process_name = arg
  52. elif opt == "--log_path":
  53. log_path = arg
  54. elif opt =="--excel_path":
  55. excel_path = arg
  56. elif opt =="--new_excel_path":
  57. new_excel_path = arg
  58. # print(process_name + "--"+log_path+"--"+excel_path+"--"+new_excel_path+"")
  59. handle=HandleData(process_name,log_path,excel_path,new_excel_path)
  60. handle.mainprocess()
cmd执行python脚本测试效果:
  1. 测试生成log message的功能:

    C:\Users\12078\Desktop\UIPATH_test\0419>python cnum_company_data0419.py --process_name=writeLog --log_path=C:\Users\12078\Desktop\UIPATH_test\0419\mylog.txt

  2. 测试处理excel/csv数据的功能:

    C:\Users\12078\Desktop\UIPATH_test\0419>python cnum_company_data0419.py --process_name=deal_with_data --excel_path=C:\Users\12078\Desktop\UIPATH_test\0419\CNUM_COMPANY.csv --new_excel_path=C:\Users\12078\Desktop\UIPATH_test\0419\out.csv

经过测试,脚本没有问题

以上程序也可以这样实现:(知识点:面向对象,反射,元组解包,不定长参数的函数)
  1. # -*- coding: UTF-8 -*-
  2. import pandas as pd
  3. import sys
  4. from pandas import DataFrame,Series
  5. class HandleData():
  6. def deal_with_data(self,paths):
  7. excel_path,new_excel_path=paths
  8. file_obj=open(excel_path)
  9. df=pd.read_csv(file_obj)
  10. df=df.reindex(columns=['CNUM','COMPANY','C_col','D_col','E_col','F_col','G_col','H_col'],fill_value=None)
  11. df.rename(columns={'COMPANY':'Company_New'}, inplace = True)
  12. df=df.dropna(axis=0,how='all')
  13. df['CNUM'] = df['CNUM'].astype('int32')
  14. df = df.drop_duplicates(subset=['CNUM', 'Company_New'], keep='first')
  15. df.to_csv(new_excel_path,index=False,encoding='GBK')
  16. file_obj.close()
  17. def writeLog(self,log_path):
  18. log_path=log_path[0]
  19. with open(log_path,"a") as logfile:
  20. logfile.write("\nthat's a test log message")
  21. def writeEventLog(self,p):
  22. process_name,content=p
  23. with open(r"C:\Users\12078\Desktop\uibot\pytest_mutiply.txt","a") as logfile:
  24. logfile.write("\nno function found" + process_name+"--"+content)
  25. def main(f,*args): # *args表示不定长参数,会将不定长参数打包成元组 args
  26. h=HandleData()
  27. if hasattr(h,f):
  28. getattr(h,f)(args)
  29. if __name__ == "__main__":
  30. # 测试 writeEventLog
  31. # main('writeEventLog','fuc_test','ttesthahah')
  32. # 测试 writeLog
  33. # main('writeLog',r"C:\Users\12078\Desktop\uibot\log_test.txt")
  34. # 测试 deal_with_data
  35. # main('deal_with_data',r"C:\Users\12078\Desktop\uibot\pytest\CNUM_COMPANY.csv",r"C:\Users\12078\Desktop\uibot\pytest\output.csv")
  36. # cmd 执行脚本时:
  37. fuc_name=sys.argv[1]
  38. argvs=sys.argv[2:]
  39. main(fuc_name,*argvs) # *argvs表示解包列表,将列表元素转为独立的个体
cmd执行上面的python脚本测试效果:
  1. 测试生成log message的功能:

    C:\Users\12078>python C:\Users\12078\Desktop\uibot\pytest\pydatahandle.py writeEventLog fuc_test testhahah

    C:\Users\12078>python C:\Users\12078\Desktop\uibot\pytest\pydatahandle.py writeLog C:\Users\12078\Desktop\uibot\mylog.txt

  2. 测试处理excel/csv数据的功能:

    C:\Users\12078>python C:\Users\12078\Desktop\uibot\pytest\pydatahandle.py deal_with_data C:\Users\12078\Desktop\uibot\pytest\CNUM_COMPANY.csv C:\Users\12078\Desktop\uibot\pytest\out.csv

经过测试,脚本没有问题

cmd执行exe编译任务:

cd C:\Users\12078\Desktop\UIPATH_test\0419

C:\Users\12078\Desktop\UIPATH_test\0419>pyinstaller cnum_company_data0419.py

或:

cd C:\Users\12078\Desktop\uibot\pytest

C:\Users\12078\Desktop\uibot\pytest>pyinstaller pydatahandle.py

使用 dist目录下的 exe程序

UIPATH调用 exe执行多任务:

1.总体框架:

2.第1次调用exe完成第一个任务:

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



4.执行结果:



CMD调用 python编译的exe:

C:\Users\12078>start C:\Users\12078\Desktop\uibot\pytest\dist\pydatahandle\pydatahandle.exe writeEventLog fuc_test testhahah

C:\Users\12078>start C:\Users\12078\Desktop\uibot\pytest\dist\pydatahandle\pydatahandle.exe deal_with_data C:\Users\12078\Desktop\uibot\pytest\CNUM_COMPANY.csv C:\Users\12078\Desktop\uibot\pytest\out.csv

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



说明

1.Author: Collin_PXY ; wechat: pxy123abc

cmd,py脚本,py编译的exe,uipath及uibot对它们的调用的更多相关文章

  1. python2.7 串口操作方式 编译 .py为windows可运行exe文件

    一 python操作串口 首先下载安装串口模块pyserial . 代码实现: import serial ser = serial.Serial('/dev/ttyUSB2', 115200) pr ...

  2. Python将py文件编译为exe的方法

    使用PyCharm工具写好的Python程序脚本,怎么将.py文件编译为可执行的.exe文件 前提是已经安装了Python环境. 第一步:在PyCharm内下载安装pyinstalle库或使用CMD安 ...

  3. py脚本打包exe可执行文件

    python3以上版本打包exe需要扩展软件:cx_freeze 下载地址:http://cx-freeze.sourceforge.net/ 1)安装后在\Python32\Scripts\cxfr ...

  4. 将.py脚本打包成.exe

    https://www.cnblogs.com/wyl-0120/p/10823102.html 为了方便使用,通过pyinstaller对脚本进行打包成exe文件. pip3 install pyi ...

  5. cmd 运行py脚本,提示找不到xx模块

    一.在学习Django+接口自动化测试,用Jenkins做定时任务,cmd运行脚本时提示 "找不到xx模块": 1.原因:Pycharm单独运行脚本时没问题,cmd运行找不到模块. ...

  6. generateScriptFile.py脚本使用过程中遇到的问题及解决

    generateScriptFile.py脚本 #!/usr/bin/env python # -*- coding: utf-8 -*- """ use case: p ...

  7. Pyinstaller通过spec文件打包py程序(多个py脚本)

    Pyinstaller pyinstaller是python的一个第三方模块,使用它可以将python程序打包为可执行文件,实现打包后的程序在没有python环境的机器上也可以运行.pyinstall ...

  8. cocos2d-x 2.1.4 使用create_project.py脚本创建项目+ant打包项目

    1.创建项目:执行create_project.py脚本,进入Doc界面输入下面的命令: cd D:\cocos2d-x-2.1.4\cocos2d-x-2.1.4\tools\project-cre ...

  9. 把perl脚本编译成exe

    来源:http://www.veryhuo.com/a/view/38338.html 今天想把 perl 脚本编译成 exe 以便脱离 perl 解释器独立运行.都可以生成PERL的PE文件,在PE ...

随机推荐

  1. ansible-初始playbook安装nginx

    1. ansible-初始playbook安装nginx 1) 创建一个ansible存放路径 1 [root@test-1 scripts]# mkdir -p /ansible/nginx/{co ...

  2. Create a cursor from hardcoded array instead of DB

    https://stackoverflow.com/questions/18290864/create-a-cursor-from-hardcoded-array-instead-of-db Crea ...

  3. 自定义 Spring Boot Starter

    关于Starter Spring Boot秉承"约定大于配置"的开发方式,使得我们基于Spring Boot开发项目的效率变得十分高.相信使用过Spring Boot的小伙伴都会发 ...

  4. day29 Pyhton 面向对象 多态 封装

    # coding:utf-8 # py2中的经典类 # class D:#没有继承object是经典类# pass # # def func(self): # # print('d') # class ...

  5. boost之multiprecision

    multiprecision boost中提供的高精度库,支持高精度整型,浮点型等.并且提供统一的接口模板,只需要指定对应的后端类型即可实现对应类型的高精度计算: boost::multiprecis ...

  6. lumen容器模仿

    <?php class Container { private $bindings = []; private $instances = []; public function getClosu ...

  7. Seaborn中几种作图方式

    趋势 sns.pointplot - 点图 ,比折线图好使 sns.lineplot - 折线图最适合显示一段时间内的趋势,多条线可以用来显示多个组中的趋势. 关系 - 可以使用许多不同的图表类型来理 ...

  8. 一篇文章 图解Python 玩转Python

    0 Python 解释器:1.Python数据结构:2.变量与运算符3 Python 流程控制 4 Python 文件处理5 python 输入输出6 Python 异常7 Python 函数和模块8 ...

  9. Java 第四课 对象 类

    1.构造方法可以为private public 2.抽象类可以有构造方法,但是必须在子类中调用(super.构造方法)

  10. linux (简单了解)

    目录 Bash Shell 简单了解 Bash Shell基础语法 一 文件管理 二 用户管理 三权限管理 四 软件管理 什么是Bash Shell 命令的解释,用来翻译用户输入的命令 Bash Sh ...