import re
import requests
import json
from threading import Thread,Lock
from concurrent.futures import ThreadPoolExecutor

list1 = []
list2 = []
code_list = [200,301,302,401]  # 定义正确的状态码

class MyThread(Thread):
    '''
    用来获取线程的值
    '''
    def __init__(self,func,args=()):
        super(MyThread, self).__init__()
        self.func = func
        self.args = args
    def run(self):
        self.result = self.func(*self.args)
    def get_result(self):
        try:
            return self.result
        except Exception:
            return None

def get_url():
    '''
    打开存放url的文件,并将结果返回出去
    :return:
    '''
    try:
        with open('hosts.txt','r',encoding='utf-8') as f:
            data = f.readlines()
            return data
    except Exception:  # 文件不存在则返回False
        return False

def verdictUrl():
    '''
    从hosts.txt文件中取出url,然后进行合法性检测
    :return:
    '''
    url_list = []
    comment_list = []
    get_url_res = get_url()
    if get_url_res:
        for data in get_url_res:
            url = data.split(',')[0]
            comment = data.split(',')[-1]
            try:
                res = re.search(r'http\w{0,1}://(\w+\.){2}\w+.*', url).group()
                url_list.append(res)
                comment_list.append(comment)
            except Exception:
                print('url:%s 有误'%url)
        return (url_list,comment_list)
    else:
        print('文件不存在......')

def getStatusCode(url,comment):
    '''
    获取网站的状态码,并将它返回出去
    :param url:
    :param comment:
    :return:
    '''
    global list1,list2
    try:
        res = requests.head(url)
        if res.status_code in code_list:
            lock.acquire()  # 开始添加互斥锁
            list1.append(res.status_code)
            lock.release()
    except requests.exceptions.ConnectionError:
        status = 0  # 自定义状态码
        lock.acquire()
        list2.append(status)
        lock.release()
    else:
        status = res.status_code  # 将状态码赋值给status
    finally:
        return {'url':url,'StatusCode':status,'comment':comment}

def sendDingDing(bc):
    '''
    用来接收getStatusCode的返回值以及钉钉发送消息
    :param bc:
    :return:
    '''
    ding_url = 'https://oapi.dingtalk.com/robot/send?access_token=e0bef403aded94c230953384353bc411a7fba57389ebd59bc0e63cc602ec175f'
    HEADERS = {
        "Content-Type": "application/json ;charset=utf-8"
    }
    bc = bc.result()
    url = bc['url']
    status = bc['StatusCode']
    comment = bc['comment']
    string_textMsg = {
        'msgtype': 'text',
        'text': {  # 自行添加需要的内容
            'content': 'url地址:%s\n'
                       'url名称:%s\n'
                       '状态码:%s\n'% (url, comment,status)
        }
    }
    string_textMsg = json.dumps(string_textMsg)  # 序列化到内存中
    res = requests.post(ding_url, data=string_textMsg, headers=HEADERS)
if __name__ == '__main__':
    lock = Lock()  # 创建锁对象

    pool = ThreadPoolExecutor(4)  # 线程池
    url,comment = verdictUrl()
    res = zip(url,comment)
    li = []
    for i in res:
        for j in range(4):  # 开启多线程
            t = MyThread(getStatusCode,args = (i[0],i[1]))
            li.append(t)
            t.start()
        for t in li:
            t.join()

        if len(list1)>3 or len(list2)>3:  # 如果xxxxx,则交给sendDingDing处理
            pool.submit(getStatusCode,i[0],i[1]).add_done_callback(sendDingDing)

git上传代码到github入门上学和连锁错误汇总,利用python落成八个url状态码的检查评定。一,浏览器进入github:

原文:ThinkPhp学习12

初稿地址

 

二,注册好未来New repository,建仓库

 2、输出模板内容      (珍视)

Linux vi 全局替换 global replace

亟需小心的是:

3,填写仓库名称,能够选择公开或私密,私密不无偿,最佳把Initialize this repository with a README勾上

 a、display  

语法及命令

语法为 :[addr]s/源字符串/目标字符串/[option]
全局替换命令为::%s/源字符串/目标字符串/g
最常用的大局替换,把cc779玖替换成009944,可这样写:

:%s/cc7799/009944/g

1.亟需在当前目录下开创hosts.txt文件,文件内容格式为:

4,到此仓库已经济建设好。

 1.display中绝非参数    $this->display();   

参数讲明

  

二.能够带参数    $this->display(本模块文件夹下的其他模板文件);
   $this->display(‘index二’);

[addr] 表示检索范围,省略时表示近期行。

  • “一,20” :表示从第贰行到20行;
  • “%” :表示整个文件,同“①,$”;
  • “. ,$” :从当前行到文件尾;
  • s : 表示替换操作

  

上传单个文件比较轻便,之间在酒馆分界面点击Create new file——>输入文件名(借使必要添Gavin件夹,能够输入文件夹名称从此,按下/
就能够自动分隔为文件夹路线了)——>输入文件内容,或描述——>选拔commit new file,文件创设完毕

   $this->display(别的文件夹下的模版文件);
   $this->display(‘Public:error’);//注意,仅仅须求在Tpl下有Public文件夹以及在那之中的error.html就可以,无需一定有Public模块

[option] : 表示操作类型

  • g 代表全局替换;
  • c 代表实行确认
  • p 代表代替结果逐行彰显(Ctrl + L苏醒荧屏);
    省略option时仅对每行第一个相称串进行沟通;
    一经在源字符串和目标字符串中冒出特殊字符,供给用”\”转义

  

   $this->display(别的核心下的 文件夹下的
模板文件);//必要展开主旨援助    $this->display(‘my:Index:index’);

上边是局地例子:

  • 将That or this 换成 This or that

:%s/\(That\) or \(this\)/\u\2 or \l\1/
  • 将句尾的child换来children

:%s/child\([ ,.;!:?]\)/children\1/g
  • 将mgi/r/abox换成mgi/r/asquare

:g/mg\([ira]\)box/s//mg//my\1square/g    <=>  :g/mg[ira]box/s/box/square/g
  • 将多少个空格换来八个空格

:%s/  */ /g
  • 采取空格替换句号也许冒号后边的三个照旧多少个空格

:%s/\([:.]\)  */\1 /g
  • 除去全体空行

:g/^$/d
  • 删除全数的空白行和空行

:g/^[  ][  ]*$/d
  • 在每行的发端插入七个空白

:%s/^/>  /
  • 在接下去的陆行末尾出席.

:.,5/$/./
  • 颠倒文件的行序

:g/.*/m0O  <=> :g/^/m0O

— 寻觅不是数字的始发行,并将其移到文件尾巴部分

:g!/^[0-9]/m$ <=> g/^[^0-9]/m$
  • 将文件的第二二到一七行内容复制十词放到当前文件的尾部

:1,10g/^/12,17t$
  • 将chapter开首行上边包车型客车第二行的剧情写道begin文件中

:g/^chapter/.+2w>>begin
:/^part2/,/^part3/g/^chapter/.+2w>>begin
:/^part2/,/^part3/g/^chapter/.+2w>>begin|+t$

初稿地址

2.ding_url换到温馨的钉钉机器人webhook链接,也足以换到微信报警

1,首先下载git:

   $this->display(一个url路径);
   $this->display(‘./Public/error.html’);

二,安装后,右键桌面会有以下四个采用:
 `Git GUI here` 和 `Git Bash here` 我们选择`Git Bash here`这项

   $this->display(‘./Public/error.html’,’utf-8′,’text/xml’);

3,在分界面输入ssh-keygen -t rsa -C"email@qq.com"
*目的是为了配置ssh,后面的email@qq.com改为你的邮箱,就是github上注册的那个邮箱,然后一路 回车三次。不出意外ssh key已经生成成功*

   $this->show($content);  

④,进入本地球磁性盘,填写key到github
  • Computer展开文件夹C:\Users\用户名.ssh

  • 能够观察变化了多少个文本id_rsa和id_rsa.pub

  • 记事本张开id_rsa.pub,复制里面包车型地铁始末。

  • 浏览器回到github,点击右上角个人头像向下三角形状采纳setting–>ssh
    and GPG keys–>new ssh key

  • 将复制的始末填入key中

    title :自己填一个任意的

    key :将刚才复制的所有内容复制到里面

 3.fetch方法    获得模板文件中的内容,以字符串形式重返   $content=$this->fetch(‘Public:error’);   

伍,验证刚刚填入的key

在git的终点输入
ssh -T git@github.com,回车后,输入yes,会提示验证成功

四.show方法    不须求模板文件,能够向来出口模板内容
    $content=$this->fetch(‘Public:error’);     dump($content);
    $content=str_replace(‘h1′,’i’,$content);
    $this->show($content);

陆,配置全局的user和email

git config --global user.name"your name"your name换来你注册github时的用户名git config --global user.email"email@qq.com"email换来你注册github的信箱

叁、模板中的赋值      (入眼)   

7,建设构造地点与github商旅的连日

git remote add origin git@github.com:yourName/yourRepo.git(把
your name调换你注册github时填写的名字,把yourRepo
换来在github创设的库房的名字)

//$this->assign(‘name’,’赵桐正’);   $this->name=’赵桐正2′;
  $this->display();

八,进入要求上传代码的文件夹,比方:

在git终端输入:cd c:/zsybim

肆、模板替换          (重点)

玖,上传文件

在git终端输入:git add ./上传该文件夹下面的所有的文件

上传单个文件要内定路径,如:git add ./read.txt

__PUBLIC__:会被替换到当前网址的国有目录 日常是 /Public/

拾,提交文件

在git终端输入:git commit -m"commit"

__ROOT__: 会替换到当前网址的地址(不含域名)

11,本地旅舍推送到服务器

在git终端输入:git push origin master

__APP__: 会替换到当前项目标U瑞虎L地址 (不含域名)

1二,最终查看文件是还是不是上传成功

进去github分界面找到呼应的库房,查看刚刚上传的公文是不是留存

__GROUP__澳门金沙国际,:会替换来当前分组的U悍马H二L地址 (不含域名)

柒,建构地点与github仓库的总是

git remote add origin git@github.com:yourName/yourRepo.git(把
your name 换来你注册github时填写的名字,把yourRepo
换成在github创立的库房的名字)

__URL__: 会替换来当前模块的U宝马X3L地址(不含域名)

八,进入要求上传代码的公文夹,比方:

在git终端输入:cd c:/zsybim

__ACTION__:会替换到当前操作的U安德拉L地址 (不含域名)

九,上传文件

在git终端输入:git add ./
(上传该文件夹上边包车型客车保有的文本)上传单个公文要钦命路径,如:git add ./read.txt

__SELF__: 会替换到当前的页面UTiggoL     

十,提交文件

在git终端输入:git commit -m"commit"

 改造模板变量规则,修改配置项
  ‘TMPL_PARSE_ST奥迪Q7ING’=>array(           //增加自个儿的沙盘变量规则
  ‘__CSS__’=>__ROOT__.’/Public/Css’,
  ‘__JS__’=>__ROOT__.’/Public/Js’,  ),

1一,本地宾馆推送到服务器

在git终端输入:git push origin master

1,输入:git remote add origin git@github.com:yourName/yourRepo.git

 报错:fatal: Not a git repository (or any of the parent directories): .git

消除办法:输入 git init ,初始化一个本地仓库

2,输入:git remote add origin git@github.com:yourName/yourRepo.git

 报错:fatal: remote origin already exists.

化解办法:1 删除Git仓库中的origin信息:git remote rm origin

2 重新添加Git仓库中的origin信息

3,输入:git push origin master

 报错:fatal: 'origin' does not appear to be a git repository fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.

解决办法:重新输入一次:git remote add origin git@github.com:yourusername/test.git

4,输入:git push origin master

 报错:fatal: remote error: XXXXXX@qq.com/myarea is not a valid repository name Email support@github.com for help

消除办法:使用git remote rm origin 然后再使用上传命令

5,输入:git push origin master

 报错:To git@git.oschina.net:yangzhi/hello.git ! [rejected] master -> master (fetch first) error: failed to push some refs to 'git@git.oschina.net:yangzhi/hello.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushin hint: to the same ref. You may want to first merge the remote changes (e.g. hint: 'git pull') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

消除办法:出现这个问题是因为github中的README.md文件不在本地代码目录中。先进行代码合并 git pull --rebase origin master 再执行 git push origin master6,输入git add ./

报错:fatal: Not a git repository (or any of the parent directories): .git

化解办法:先输入git init,再add

原创小编:梦凌小样小说链接:

 


相关文章