python 自动化办公 uibot_cmd,py脚本,py编译的exe,uipath及uibot对它们的调用

UIPATH调用Python编译程序exe

好处:

1)code不以可编辑的状态被用户接触,对于不懂反编译的一般用户,可提升一定的代码安全性;

2)不需要用户机器上安装 python环境。

3)可以将能够执行不同任务的脚本编译成同一个exe程序,通过传入不同参数实现不同任务。

1).生成并调用单任务 exe程序:

准备单任务python脚本 2. 将仅执行单任务的脚本打包成exe 3. UIPATH调用exe

2).生成并调用多任务 exe程序:

准备多任务python脚本 2. 将可执行多任务的脚本打包成exe 3. UIPATH调用exe

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脚本测试效果:

测试生成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

测试处理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脚本测试效果:

测试生成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

测试处理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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值