如题,本文实现的是在windows环境下python编写脚本实现打开测试的网站,作为运维人员,每天一个个打开网页实在繁琐,这里将其归合成一个脚本,并且打包成exe,方便在别的没有安装Python环境的机器上面运行
首先电脑要安装python和pywin32-218.win-amd64-py2.7.exe
我这里都是安装64位的,并且安装的都是2.7版本的
安装win32模块的时候可能会提示需要注册,不然安装的时候会找不到python模块的目录
我这里顺便上传个register.py的代码,只需要放在python的安装目录下执行一下就可以了
import sys
from _winreg import *
# tweak as necessary
version = sys.version[:3]
installpath = sys.prefix
regpath = "SOFTWARE\\Python\\Pythoncore\\%s\\" % (version)
installkey = "InstallPath"
pythonkey = "PythonPath"
pythonpath = "%s;%s\\Lib\\;%s\\DLLs\\" % (
installpath, installpath, installpath
)
def RegisterPy():
print "begin RegisterPy "
try:
print "open key : %s" % regpath
reg = OpenKey(HKEY_CURRENT_USER, regpath)
except EnvironmentError as e:
try:
reg = CreateKey(HKEY_CURRENT_USER, regpath)
SetValue(reg, installkey, REG_SZ, installpath)
SetValue(reg, pythonkey, REG_SZ, pythonpath)
CloseKey(reg)
except:
print "*** EXCEPT: Unable to register!"
return
print "--- Python", version, "is now registered!"
return
if (QueryValue(reg, installkey) == installpath and
QueryValue(reg, pythonkey) == pythonpath):
CloseKey(reg)
print "=== Python", version, "is already registered!"
return CloseKey(reg)
print "*** ERROR:Unable to register!"
print "*** REASON:You probably have another Python installation!"
def UnRegisterPy():
# print "begin UnRegisterPy "
try:
print "open HKEY_CURRENT_USER key=%s" % (regpath)
reg = OpenKey(HKEY_CURRENT_USER, regpath)
# reg = OpenKey(HKEY_LOCAL_MACHINE, regpath)
except EnvironmentError:
print "*** Python not registered?!"
return
try:
DeleteKey(reg, installkey)
DeleteKey(reg, pythonkey)
DeleteKey(HKEY_LOCAL_MACHINE, regpath)
except:
print "*** Unable to un-register!"
else:
print "--- Python", version, "is no longer registered!"
if __name__ == "__main__":
RegisterPy()
然后安装pywin32的时候下一步的时候会找到python的注册目录,然后直接下一步就安装完成了,安装的目录在python的Lib下面的site-spackages下,如果安装位数错了可以删掉这个目录下对应的pywin32文件夹再重装
下面首先给出Python代码
#!D:\Python27\python.exe
# -*- coding: UTF-8 -*-
import urllib2
import webbrowser
import win32api
import win32con
import time
import os
title = "警告!"
content = "网站无法打开"
firefoxcontent = "没有安装firefox或者firefox不是安装在D盘,请检查!"
firefoxPath = ""
#获取firefox浏览器的应用程序所在目录,浏览器必须安装在D盘!
def search(path, name):
for item in os.listdir(path):
item_path = os.path.join(path, item)
if os.path.isdir(item_path):
search(item_path, name)
elif os.path.isfile(item_path):
if name == item:
global firefoxPath
firefoxPath = item_path
search("D:/","firefox.exe")
if firefoxPath:
webbrowser.register('firefox', None, webbrowser.BackgroundBrowser(firefoxPath))
url1 = "http://www.baidu.com"
try:
response = urllib2.urlopen(url1,timeout=20)
except urllib2.HTTPError as e: # HTTPError 是URLError的子类,需要写在前面,否则会被覆盖
print('The server couldn\'t fulfill the request.')
print('Error code: ', e.code)
except urllib2.URLError as e:
content = '该网站无法打开'
win32api.MessageBox(0, content.decode('utf-8').encode('gbk'), title.decode('utf-8').encode('gbk') + url1, win32con.MB_OK)
else:
webbrowser.get('firefox').open(url1,new=2, autoraise=True) #百度
time.sleep(3)
url2 = "http://www.sina.com"
try:
response = urllib2.urlopen(url2,timeout=20)
except urllib2.HTTPError as e: # HTTPError 是URLError的子类,需要写在前面,否则会被覆盖
print('The server couldn\'t fulfill the request.')
print('Error code: ', e.code)
except urllib2.URLError as e:
content = '该网站无法打开'
win32api.MessageBox(0, content.decode('utf-8').encode('gbk'), title.decode('utf-8').encode('gbk') + url2, win32con.MB_OK)
else:
webbrowser.get('firefox').open(url2,new=2, autoraise=True) #新浪
else:
win32api.MessageBox(0, firefoxcontent.decode('utf-8').encode('gbk'), title.decode('utf-8').encode('gbk') ,win32con.MB_OK)
下面 给大家讲解一下代码:
最开头需要指明python的根目录
然后我用了一个递归的search方法去搜索D盘的所有目录,如果含有firefox.exe这个应用程序,则赋值给这个firefoxPath
由于search遍历的路径是D盘,所以如果代码移植到别的电脑上面,这个电脑也必须把火狐浏览器安装在D盘
search函数中(D:\\)这里两个\\是转义字符,表示一个\
webbrowser模块:
new:0就是同一浏览器打开,1是打开新的浏览器,2是打开浏览器tab
firefox:把火狐浏览器赋值给这个变量,名字可以随便取
下面我调用了urllib2模块的方法分别打开sina和baidu两个网站,具体url根据你需要修改,但是url必须是以http开头的,不然后面对网站不可访问的错误抛出处理的时候会有麻烦,然后我用到了urllib2中的HTTPError和URLError的错误抛出处理,在处理里面调用了windows的MessageBox方法,当网站不可访问的时候会弹出不可访问的提示框
程序写好,确保可以执行成功之后把他打包成exe文件,这里我用到了pyinstaller-2.0这个软件,下载下来是个zip压缩包,解压之后直接就可以用了,不用安装
把我们刚才写好的python代码文件拷到Pyinstaller目录下,我这里是webcheck.py文件
然后我们打开windows的cmd命令,切换到pyinstaller的目录下使用命令
python pyinstaller.py -F -p D:\Pyt
hon27;D:\Python27\Lib;D:\Python27\Lib\site-packages;D:\Python27\Lib\site-package
s\adodbapi;D:\Python27\Lib\site-packages\win32;D:\Python27\Lib\site-packages\win
32com;D:\Python27\Lib\site-packages\win32comext;D:\Python27\Lib\site-packages\se
tuptools;D:\Python27\Lib\site-packages\pip;D:\Python27\Lib\site-packages\isapi w
ebcheck-f.py
可执行的文件
其中 -F是只生成一个.exe文件,-p后面加打包时候搜索的python库,我这几乎加了所有的路径进去
可以看到可执行文件了
然后双击他看能不能执行吧
错误:
在把exe放到别的电脑上面运行报错(注意:用用cmd命令的方式运行该程序,不然的话出现闪退的情况就很难看到错误信息了)
这里我们要在该电脑上面开启该目录的权限
cacls "D:/System Volumn Information" /E /G administrator:D
cacls "D:/System Volumn Information" /E /G administrator:C
建议上面两行都输一遍
赋予指定用户打开C盘和D盘对这个目录的访问权限
然后再用cmd打开貌似搞定了
最后注明:上面代码我在win7和win10的环境下测试经过调试都是可以运行的,win server 2008貌似是不行的
来源:CSDN
作者:丢你刘某
链接:https://blog.csdn.net/qq_26614295/article/details/78352490