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)

1,浏览器进入github:

原文:ThinkPhp学习12

原版的书文地址

 

2,注册好以往New repository,建仓库

 ② 、输出模板内容      (重点)

Linux vi 全局替换 global replace

急需小心的是:

3,填写仓库名称,能够选拔公开或私密,私密不免费,最棒把Initialize this repository with a README勾上

 a、display  

语法及命令

语法为 :[addr]s/源字符串/目标字符串/[option]
大局替换命令为::%s/源字符串/指标字符串/g
最常用的全局替换,把cc7799替换来009944,可那般写:

:%s/cc7799/009944/g

1.索要在当前目录下创办hosts.txt文件,文件内容格式为:

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

 1.display中从不参数    $this->display();   

参数讲解

  

2.方可带参数    $this->display(本模块文件夹下的其余模板文件);
   $this->display(‘index2’);

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

  • “1,20” :表示从第3行到20行;
  • “%” :表示一切文件,同“1,$”;
  • “. ,$” :从如今行到文件尾;
  • s : 表示替换操作

  

上传单个文件比较简单,之间在仓房界面点击Create new file——>输入文件名(假如必要丰硕文件夹,能够输入文件夹名称从此,按下/
就会活动分隔为文件夹路径了)——>输入文件内容,或描述——>选拔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
  • 将八个空格换来1个空格

:%s/  */ /g
  • git上传代码到github入门上学和有关错误汇总,利用python完毕四个url状态码的检测。使用空格替换句号也许冒号前面包车型地铁二个依旧多少个空格

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

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

:g/^[  ][  ]*$/d
  • 在每行的先导插入五个空白

:%s/^/>  /
  • 在接下去的6行末尾加入.

:.,5/$/./
  • 指鹿为马文件的行序

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

— 寻找不是数字的发端行,并将其移到文件尾部

:g!/^[0-9]/m$ <=> g/^[^0-9]/m$
  • 将文件的第三2到17行内容复制10词放到当前文件的尾巴

: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’);

2,安装后,右键桌面会有以下多少个挑选:
 `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);  

4,进入地面磁盘,填写key到github
  • 处理器打开文件夹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’);   

5,验证刚刚填入的key

在git的顶点输入
ssh -T git@github.com,回车后,输入yes,会唤起验证成功

4.show方法    不必要模板文件,能够一直出口模板内容
    $content=$this->fetch(‘Public:error’);     dump($content);
    $content=str_replace(‘h1′,’i’,$content);
    $this->show($content);

6,配置全局的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();

8,进入供给上传代码的文本夹,例如:

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

④ 、模板替换          (重点)

9,上传文件

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

上传单个文件要钦命路线,如:git add ./read.txt

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

10,提交文件

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

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

11,本地仓库推送到服务器

在git终端输入:git push origin master

__APP__: 会替换来当前项目标U福睿斯L地址 (不含域名)

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

进入github界面找到相应的仓库,查看刚刚上传的文件是不是存在

__GROUP__:会替换到当前分组的U揽胜L地址 (不含域名)

7,建立地点与github仓库的连续

git remote add origin git@github.com:yourName/yourRepo.git(把
your name 换来你注册github时填写的名字,把yourRepo
换到在github建立的堆栈的名字)

__URL__: 会替换到当前模块的U索罗德L地址(不含域名)

8,进入须要上传代码的文件夹,例如:

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

__ACTION__:会替换到当前操作的U奥迪Q3L地址 (不含域名)

9,上传文件

在git终端输入:git add ./
(上传该文件夹上面包车型客车具备的文本)上传单个文件要钦点路线,如:git add ./read.txt

__SELF__: 会替换到当前的页面U路虎极光L     

10,提交文件

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

 更换模板变量规则,修改配置项
  ‘TMPL_PARSE_STSportageING’=>array(           //添加本人的模版变量规则
  ‘__CSS__’=>__ROOT__.’/Public/Css’,
  ‘__JS__’=>__ROOT__.’/Public/Js’,  ),

11,本地仓库推送到服务器

在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

原创小编:梦凌小样文章链接:

 


相关文章