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. vue+element ui 关闭弹窗前清空form表单的值

    this.$refs['disposeConfigsform'].resetFields();

  2. dgraph 使用简介

    dgraph 简介 dgraph 使用示例(基于 golang) golang client 安装 创建 schema 数据的 CURD 事务 总结 dgraph 简介 dgraph 是基于 gola ...

  3. 3.字符设备led驱动

    1.硬件原理图 由图可知,led1,led2,led3,led4,分别对应GPB5,GPB6,GPB7,GPB8,由s3c2440芯片手册可得到如下图所示,分别配置GPBCON和GPBDAT即可 2. ...

  4. 多测师讲解自动化 _邮件发送_高级讲师肖sir

    第一步.进入如下网址申请163邮箱. https://mail.163.com/ 第二步.注册完之后登录.点击如下图设置­点击POP3/SMTP/IMAP. 第三步.右侧点击客户端授权密码. 第四步. ...

  5. if-else和if if的对比

  6. js、css等文件引入空白问题

    路径没错,不管路径怎么改变,js.css等文件就是引入失败.很多时候是因为Spring的过滤器把js.css等资源文件拦截了.default是tomcat配置的一个servlet,"Defa ...

  7. css和js实现硬件加速渲染自定义滚动条

    听别人说用CSS的变换来实现渲染有硬件加速的效果,看到很多大网站都开始陆续使用上了,我也来说说怎么做,我这边实现的滚动条有自然滚动效果,看起来比较自然,说的再多不如直接写,让我们开始吧! 我们需要自己 ...

  8. Redis五种常用数据类型

    string 字符串常用操作 1.存入字符串键值对  SET key value 2.批量存储字符串键值对  MSET key value [key value ...] 3.获取一个字符串键值  G ...

  9. ceil中有-0啊

          这里主要是有一点: 1 Math.ceil(d1)  ceil 方法上有这么一段注释:If the argument value is less than zero but greater ...

  10. ng中的ng-content ng-template ng-container

    在angular中,有这样三个自带的标签,但是在angular的文档中没有说明,只有在api中有简单的描述,摸索了半天才搞懂是咋回事. ng-content <div> <ng-co ...