工作需要,调研了下将python打包成exe的方式,在此记录遇到的问题。程序功能向指定url发送一个get请求,并在窗口中显示响应。
请求参数比较奇怪,是xml,因为是完整的字符串,注意代码中的xml必须用三引号。这里直接给出调试代码:
"""
Created on Fri Nov 16 14:00:35 2018
@author: xuanlei.zhang
"""
from tkinter import *
from urllib import parse,request
from tkinter import messagebox
from PIL import Image,ImageTk
textmod={"InXml":'''
<request>
<identity>
<computername>TCZ-L572520</computername>
<curuserno>1</curuserno>
<sendtime>2017/3/17 11:33:09</sendtime>
</identity>
<parameter>
<paraname>
<name>ParaName</name>
<type>String</type>
<value>lotno</value>
<desc></desc>
</paraname>
<paravalue>
<name>ParaValue</name>
<type>String</type>
<value>
<moduledata>A01150904900001</moduledata>
</value>
<value>
<moduledata>A01150904900002</moduledata>
</value>
...
...
...
<desc></desc>
</paravalue>
</parameter>
</request>
'''}
textmod = parse.urlencode(textmod)
#print(textmod)
header_dict = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko'}
url='http://your ip/MESws_Trinasolar_Test/wsWIP/wsWIP.asmx/LoadModuleData'
req = request.Request(url='%s%s%s' % (url,'?',textmod),headers=header_dict)
res = request.urlopen(req)
res = res.read()
print(res)
#输出内容(python3默认获取到的是16进制'bytes'类型数据 Unicode编码,如果如需可读输出则需decode解码成对应编码):b'\xe7\x99\xbb\xe5\xbd\x95\xe6\x88\x90\xe5\x8a\x9f'
print(res.decode(encoding='utf-8'))
基于tkinter做交互界面,代码如下:
def rex():
global result
header_dict = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko'}
url = entry1.get()
# print(url)
if not url:
messagebox.showinfo('请输入完整的URL!')
px = entry2.get()
if not px:
messagebox.showinfo('请输入必须参数:InXml!')
xmls = entry3.get()
if not px:
messagebox.showinfo('请输入请求Xml参数!')
# xmls = '"""'+str(xmls)+'""" '
# print(xmls)
# xmls = 'r'+xmls
textmods={px:xmls}
# print(textmods)
textmod = parse.urlencode(textmods)
req = request.Request(url='%s%s%s' % (url,'?',textmod),headers=header_dict)
res = request.urlopen(req)
result = res.read().decode(encoding='utf-8')
entryvar.set(result)
if __name__ == '__main__':
result =0
root = Tk()
root.title('TrinaPostDemo-py')
root.geometry('800x370')
root.geometry('+500+200')
label1 = Label(root,text = 'URL',font = ('微软雅黑',20))
label1.grid(row=0,column = 0)
entry1 = Entry(root,font = ('微软雅黑',35))
entry1.grid(row = 0,column = 1)
label2 = Label(root,text = '参数-InXml',font = ('微软雅黑',20))
label2.grid(row=1,column = 0)
entry2 = Entry(root,font = ('微软雅黑',35))
entry2.grid(row = 1,column = 1)
label3 = Label(root,text = '参数-XML',font = ('微软雅黑',20))
label3.grid(row=2,column = 0)
entry3 = Entry(root,font = ('微软雅黑',35))
entry3.grid(row = 2,column = 1)
Label(root,text="响应",font = ('微软雅黑',20)).grid(row=3,column=0)
entryvar=IntVar()
Entry(root,textvariable=entryvar,font = ('微软雅黑',35)).grid(row=3,column=1)
entryvar.set(result)
Button(root,text = '发送请求',font = ('微软雅黑',20),command = rex).grid(row = 75,column = 1)
root.mainloop()
pyinstaller -F get_post.py打包