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("\nthat's a test log message") def writeEventLog(self):
with open(r"C:\Users\12078\Desktop\UIPATH_test\0419\EventLogs_Bot1.txt","a") as logfile:
logfile.write("\nno 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:\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

经过测试,脚本没有问题

以上程序也可以这样实现:(知识点:面向对象,反射,元组解包,不定长参数的函数)
# -*- 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("\nthat's a test log message") def writeEventLog(self,p):
process_name,content=p
with open(r"C:\Users\12078\Desktop\uibot\pytest_mutiply.txt","a") as logfile:
logfile.write("\nno 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:\Users\12078\Desktop\uibot\log_test.txt")
# 测试 deal_with_data
# main('deal_with_data',r"C:\Users\12078\Desktop\uibot\pytest\CNUM_COMPANY.csv",r"C:\Users\12078\Desktop\uibot\pytest\output.csv") # cmd 执行脚本时:
fuc_name=sys.argv[1]
argvs=sys.argv[2:]
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. intellij idea如何解决javax.servlet.http不存在

    正确的解决方法是:对项目名右键,选中Open Mudule Settings--选择左侧的Modules,选择右边的Dependencies--然后点击右侧边栏的绿色"+"号,点击 ...

  2. git 本地回滚到上一个版本

    linux下是 git reset --hard HEAD^ windows下是 git reset --hard HEAD"^"

  3. 【5】进大厂必须掌握的面试题-Java面试-spring

    spring面试问题 Q1.什么是spring? Spring本质上是一个轻量级的集成框架,可用于用Java开发企业应用程序. Q2.命名Spring框架的不同模块. 一些重要的Spring Fram ...

  4. day32 Pyhton 模块02复习 序列化

    一. 什么是序列化 在我们存储数据或者网络传输数据的时候. 需要对我们的对象进行处理. 把对象处理成方便存储和传输的数据格式. 这个过程叫序列化 不同的序列化, 结果也不同. 但是目的是一样的. 都是 ...

  5. 0基础如何更快速入门Linux系统?学完Linux有哪些就业方向?

    Linux系统是使用Linux内核及开源自由软件组成的一套操作系统,是一种类UNIX系统,其内核在1991年10月5日由林纳斯·托瓦兹首次发布. 它的主要特性:Linux文件一切皆文件.完全开源免费. ...

  6. centos8平台使用iostat监控磁盘io

    一,iostat所属的包: [root@centos8 ~]# whereis iostat iostat: /usr/bin/iostat /usr/share/man/man1/iostat.1. ...

  7. js后台提交成功后 关闭当前页 并刷新父窗体

    后台提交成功后 关闭当前页 并刷新父窗体 this.ClientScript.RegisterStartupScript(this.GetType(), "message", &q ...

  8. Kettle学习笔记(一)

    Kettle简介 Kettle是一款国外开源的ETL工具,纯java编写,可以在Windows.Linux.Unix上运行,s数据抽取高效稳定.Kettle 中文名称叫水壶,该项目的主程序员MATT ...

  9. 解决Django本地接口不能跨域访问的问题

    1.安装django-cors-headers模块: pip install django-cors-headers 2.插入Django的APP配置中: # 修改settings.py中的INSTA ...

  10. LSM 树详解

    LSM树(Log Structured Merged Tree)的名字往往给人一个错误的印象, 实际上LSM树并没有严格的树状结构. LSM 树的思想是使用顺序写代替随机写来提高写性能,与此同时会略微 ...