<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Cron - 标签 - 菠菜眾長</title><link>https://lruihao.cn/tags/cron/</link><description>Cron - 标签 - 菠菜眾長</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><managingEditor>1024@lruihao.cn (Lruihao)</managingEditor><webMaster>1024@lruihao.cn (Lruihao)</webMaster><lastBuildDate>Wed, 25 Mar 2020 09:19:44 +0000</lastBuildDate><atom:link href="https://lruihao.cn/tags/cron/" rel="self" type="application/rss+xml"/><item><title>Cron 表达式的基本语法</title><link>https://lruihao.cn/posts/cron/</link><pubDate>Wed, 25 Mar 2020 09:19:44 +0000</pubDate><author>Lruihao</author><guid>https://lruihao.cn/posts/cron/</guid><description><![CDATA[<h2 id="基本语法">基本语法</h2>
<blockquote>
<p><code>&lt;秒&gt; &lt;分钟&gt; &lt;小时&gt; &lt;日期 day-of-month&gt; &lt;月份&gt; &lt;星期 day-of-week&gt;</code></p>
</blockquote>
<p>Cron 表达式是一个具有时间含义的字符串，字符串以 5 个空格隔开，分为 6 个域，格式为 <code>X X X X X X</code>。其中 X 是一个域的占位符。单个域有多个取值时，使用半角逗号，隔开取值。每个域可以是确定的取值，也可以是具有逻辑意义的特殊字符。</p>
<h2 id="域取值">域取值</h2>
<table>
<thead>
<tr>
<th>位置</th>
<th>字段</th>
<th>约束</th>
<th>取值</th>
<th>可使用的特殊符号</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>秒</td>
<td>必须</td>
<td>0-59</td>
<td><code>, - * /</code></td>
</tr>
<tr>
<td>2</td>
<td>分钟</td>
<td>必须</td>
<td>0-59</td>
<td><code>, - * /</code></td>
</tr>
<tr>
<td>3</td>
<td>小时</td>
<td>必须</td>
<td>0-23（0 为午夜）</td>
<td><code>, - * /</code></td>
</tr>
<tr>
<td>4</td>
<td>日期</td>
<td>必须</td>
<td>1-31</td>
<td><code>, - * ? / L W</code></td>
</tr>
<tr>
<td>5</td>
<td>月份</td>
<td>必须</td>
<td>1-12 或者 JAN-DEC</td>
<td><code>, - * /</code></td>
</tr>
<tr>
<td>6</td>
<td>星期</td>
<td>必须</td>
<td>1-7 或者 SUN-SAT (<code>1</code> 代表星期一）</td>
<td><code>, - ? / L #</code></td>
</tr>
</tbody>
</table>
<h2 id="特殊符号">特殊符号</h2>
<table>
<thead>
<tr>
<th style="text-align:left">符号</th>
<th style="text-align:left">含义</th>
<th style="text-align:left">示例</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>*</code></td>
<td style="text-align:left">所有可能的值。</td>
<td style="text-align:left">在月域中，<code>*</code>表示每个月；在星期域中，<code>*</code>表示星期的每一天。</td>
</tr>
<tr>
<td style="text-align:left"><code>,</code></td>
<td style="text-align:left">列出枚举值。</td>
<td style="text-align:left">在分钟域中，<code>5,20</code>表示分别在 5 分钟和 20 分钟触发一次。</td>
</tr>
<tr>
<td style="text-align:left"><code>-</code></td>
<td style="text-align:left">范围。</td>
<td style="text-align:left">在分钟域中，<code>5-20</code>表示从 5 分钟到 20 分钟之间每隔一分钟触发一次。</td>
</tr>
<tr>
<td style="text-align:left"><code>/</code></td>
<td style="text-align:left">指定数值的增量。</td>
<td style="text-align:left">在分钟域中，<code>0/15</code>表示从第 0 分钟开始，每 15 分钟。在分钟域中<code>3/20</code>表示从第 3 分钟开始，每 20 分钟。<strong>*/</strong> 和 <strong>0/</strong> 相同</td>
</tr>
<tr>
<td style="text-align:left"><code>?</code></td>
<td style="text-align:left">不指定值，仅日期和星期域支持该字符。</td>
<td style="text-align:left">当日期或星期域其中之一被指定了值以后，为了避免冲突，需要将另一个域的值设为<code>?</code>。</td>
</tr>
<tr>
<td style="text-align:left"><code>L</code></td>
<td style="text-align:left">单词 Last 的首字母，表示最后一天，仅日期和星期域支持该字符。<strong>说明</strong> 指定<code>L</code>字符时，避免指定列表或者范围，否则，会导致逻辑问题。</td>
<td style="text-align:left">在日期域中，<code>L</code>表示某个月的最后一天。在星期域中，<code>L</code>表示一个星期的最后一天，也就是星期日（<code>SUN</code>）。如果在<code>L</code>前有具体的内容，例如，在星期域中的<code>6L</code>表示这个月的最后一个星期六。</td>
</tr>
<tr>
<td style="text-align:left"><code>W</code></td>
<td style="text-align:left">除周末以外的有效工作日，在离指定日期的最近的有效工作日触发事件。<code>W</code>字符寻找最近有效工作日时不会跨过当前月份，连用字符<code>LW</code>时表示为指定月份的最后一个工作日。</td>
<td style="text-align:left">在日期域中<code>5W</code>，如果 5 日是星期六，则将在最近的工作日星期五，即 4 日触发。如果 5 日是星期天，则将在最近的工作日星期一，即 6 日触发；如果 5 日在星期一到星期五中的一天，则就在 5 日触发。</td>
</tr>
<tr>
<td style="text-align:left"><code>#</code></td>
<td style="text-align:left">确定每个月第几个星期几，仅星期域支持该字符。</td>
<td style="text-align:left">在星期域中，<code>4#2</code>表示某月的第二个星期四。</td>
</tr>
</tbody>
</table>
<h2 id="举个栗子-">举个栗子 🌰</h2>
<table>
<thead>
<tr>
<th style="text-align:left">表达式</th>
<th style="text-align:left">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>0 0/5 * * * ?</code></td>
<td style="text-align:left">每隔 5 分钟执行一次</td>
</tr>
<tr>
<td style="text-align:left"><code>10 0/5 * * * ?</code></td>
<td style="text-align:left">每隔 5 分钟执行一次，每次执行都在分钟开始的 10 秒，例如 10:00:10、10:05:10 等等。</td>
</tr>
<tr>
<td style="text-align:left"><code>0 30 10-13 ? * WED,FRI</code></td>
<td style="text-align:left">每周三和每周五的 10:30、11:30、12:30、13:30 执行。</td>
</tr>
<tr>
<td style="text-align:left"><code>0 0/30 8-9 5,20 * ?</code></td>
<td style="text-align:left">每个月的 5 号和 20 号的 8 点和 10 点之间每隔 30 分钟执行一次，也就是 8:00、8:30、9:00 和 9:30。</td>
</tr>
<tr>
<td style="text-align:left"><code>0 15 10 ? * *</code></td>
<td style="text-align:left">每天上午 10:15 执行任务</td>
</tr>
<tr>
<td style="text-align:left"><code>0 15 10 * * ?</code></td>
<td style="text-align:left">每天上午 10:15 执行任务</td>
</tr>
<tr>
<td style="text-align:left"><code>0 0 12 * * ?</code></td>
<td style="text-align:left">每天中午 12:00 执行任务</td>
</tr>
<tr>
<td style="text-align:left"><code>0 0 10,14,16 * * ?</code></td>
<td style="text-align:left">每天上午 10:00 点、下午 14:00 以及下午 16:00 执行任务</td>
</tr>
<tr>
<td style="text-align:left"><code>0 0/30 9-17 * * ?</code></td>
<td style="text-align:left">每天上午 09:00 到下午 17:00 时间段内每隔半小时执行任务</td>
</tr>
<tr>
<td style="text-align:left"><code>0 * 14 * * ?</code></td>
<td style="text-align:left">每天下午 14:00 到下午 14:59 时间段内每隔 1 分钟执行任务</td>
</tr>
<tr>
<td style="text-align:left"><code>0 0-5 14 * * ?</code></td>
<td style="text-align:left">每天下午 14:00 到下午 14:05 时间段内每隔 1 分钟执行任务</td>
</tr>
<tr>
<td style="text-align:left"><code>0 0/5 14 * * ?</code></td>
<td style="text-align:left">每天下午 14:00 到下午 14:55 时间段内每隔 5 分钟执行任务</td>
</tr>
<tr>
<td style="text-align:left"><code>0 0/5 14,18 * * ?</code></td>
<td style="text-align:left">每天下午 14:00 到下午 14:55、下午 18:00 到下午 18:55 时间段内每隔 5 分钟执行任务</td>
</tr>
<tr>
<td style="text-align:left"><code>0 0 12 ? * WED</code></td>
<td style="text-align:left">每个星期三中午 12:00 执行任务</td>
</tr>
<tr>
<td style="text-align:left"><code>0 15 10 15 * ?</code></td>
<td style="text-align:left">每月 15 日上午 10:15 执行任务</td>
</tr>
<tr>
<td style="text-align:left"><code>0 15 10 L * ?</code></td>
<td style="text-align:left">每月最后一日上午 10:15 执行任务</td>
</tr>
<tr>
<td style="text-align:left"><code>0 15 10 ? * 6L</code></td>
<td style="text-align:left">每月最后一个星期六上午 10:15 执行任务</td>
</tr>
<tr>
<td style="text-align:left"><code>0 15 10 ? * 6#3</code></td>
<td style="text-align:left">每月第三个星期六上午 10:15 执行任务</td>
</tr>
<tr>
<td style="text-align:left"><code>0 10,44 14 ? 3 WED</code></td>
<td style="text-align:left">每年 3 月的每个星期三下午 14:10 和 14:44 执行任务</td>
</tr>
</tbody>
</table>]]></description></item><item><title>python 实战：模拟 post 请求定时获取后台数据并打包发送至微信</title><link>https://lruihao.cn/posts/mx2wx/</link><pubDate>Sat, 11 May 2019 17:02:31 +0000</pubDate><author>Lruihao</author><guid>https://lruihao.cn/posts/mx2wx/</guid><description><![CDATA[<blockquote>
<p>用 python 模拟 post 请求获取“麻小科技”示例酒店后台的数据，再打包发送至指定的微信群或者好友。<br>
要求每天早上 8 点定时把每个酒店的数据发送至每个酒店的微信工作群。</p>
</blockquote>
<h2 id="背景">背景</h2>
<blockquote>
<p>麻小科技：<br>
麻小科技全名深圳市麻小科技有限公司，成立于 2017 年 1 月。是我高一的时候参加<code>Peer 夏令营</code>带我们一个玩的“老师”和他的朋友的创业公司，说老师有点奇怪，我们都是直接叫名字的，比如大家都叫我瑞豪，我也就叫他文捷哥，简称捷哥吧。他们公司主要的开发模式是，小程序前端+php 后端，然后做的是酒店小程序，为每个酒店定制小程序。这些小程序可以贴在客房中给访客提供一些服务，大大节省了成本也提高了效率。<br>
然后每个酒店小程序都有独立的后台，后台会记录一些点击需求的数据。现在他们有一个需求需要把每个酒店小程序后台的数据在每天早上 9 点发送至对应酒店的微信群。</p>
</blockquote>
<h2 id="实现代码">实现代码</h2>
<blockquote>
<p>缓存登录信息，短时间类无需重复登录，仅第一次需要扫码登录（相当于微信网页版），后面的登录只需在手机上确认登录信息。</p>
</blockquote>
<div class="highlight" id="id-1"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span><span class="lnt">51
</span><span class="lnt">52
</span><span class="lnt">53
</span><span class="lnt">54
</span><span class="lnt">55
</span><span class="lnt">56
</span><span class="lnt">57
</span><span class="lnt">58
</span><span class="lnt">59
</span><span class="lnt">60
</span><span class="lnt">61
</span><span class="lnt">62
</span><span class="lnt">63
</span><span class="lnt">64
</span><span class="lnt">65
</span><span class="lnt">66
</span><span class="lnt">67
</span><span class="lnt">68
</span><span class="lnt">69
</span><span class="lnt">70
</span><span class="lnt">71
</span><span class="lnt">72
</span><span class="lnt">73
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="ch">#!/usr/bin/python</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">json</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">time</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">wxpy</span> <span class="kn">import</span> <span class="o">*</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">## 基本信息填写：</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 酒店 id，酒店名称及群名列表数据，格式：[&#34;xxx&#34;,&#34;xxx&#34;,&#34;xxx&#34;]</span>
</span></span><span class="line"><span class="cl"><span class="c1">## 使用时请将以下三个列表一一对应</span>
</span></span><span class="line"><span class="cl"><span class="n">hotel</span><span class="o">=</span><span class="p">[</span><span class="s2">&#34;xxxx&#34;</span><span class="p">,</span><span class="s2">&#34;xxxx&#34;</span><span class="p">]</span> <span class="c1">## 酒店后台数据接口二级域名，已匿名</span>
</span></span><span class="line"><span class="cl"><span class="n">hotel_name</span><span class="o">=</span><span class="p">[</span><span class="s2">&#34;增城宾馆&#34;</span><span class="p">,</span><span class="s2">&#34;百丽酒店&#34;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">grouplist</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&#34;麻小&#34;</span><span class="p">,</span><span class="s2">&#34;富强民主文明和谐自由平等公正法治&#34;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">## post 请求发送的数据</span>
</span></span><span class="line"><span class="cl"><span class="n">postData</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="c1">## &#39;username&#39;:&#39;test&#39;,</span>
</span></span><span class="line"><span class="cl">    <span class="c1">## &#39;password&#39;:&#39;123456&#39;,</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">get_data</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">	<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1">#结果列表</span>
</span></span><span class="line"><span class="cl">	<span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1">#计数器</span>
</span></span><span class="line"><span class="cl">	<span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">hotel</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">		<span class="n">url</span><span class="o">=</span><span class="s2">&#34;http://&#34;</span><span class="o">+</span><span class="n">each</span><span class="o">+</span><span class="s2">&#34;.maxiaokeji.com/xxx/xxxxxxx/xxx&#34;</span> <span class="c1">## 为保护隐私及权益，这里不提供接口</span>
</span></span><span class="line"><span class="cl">		<span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span><span class="n">data</span><span class="o">=</span><span class="n">postData</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">		<span class="c1">## print(r.text)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">## 把结果转化为 json 字符串</span>
</span></span><span class="line"><span class="cl">		<span class="n">response</span><span class="o">=</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">json</span><span class="p">(),</span><span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span><span class="n">ensure_ascii</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="c1">#sort_keys=True</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">## 把 json 转换为 dict 字典作为中间结果，再取出昨日数据</span>
</span></span><span class="line"><span class="cl">		<span class="n">midresult</span><span class="o">=</span><span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">		<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&#34;早上好！&#34;</span><span class="o">+</span><span class="n">hotel_name</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">+</span><span class="s2">&#34;小程序昨日数据如下：</span><span class="se">\n</span><span class="s2"> 访问数：&#34;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">midresult</span><span class="p">[</span><span class="s2">&#34;data&#34;</span><span class="p">][</span><span class="s2">&#34;yesterday_data&#34;</span><span class="p">][</span><span class="s2">&#34;type1&#34;</span><span class="p">])</span><span class="o">+</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2"> 房间数：&#34;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">midresult</span><span class="p">[</span><span class="s2">&#34;data&#34;</span><span class="p">][</span><span class="s2">&#34;yesterday_data&#34;</span><span class="p">][</span><span class="s2">&#34;type2&#34;</span><span class="p">])</span><span class="o">+</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2"> 需求量：&#34;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">midresult</span><span class="p">[</span><span class="s2">&#34;data&#34;</span><span class="p">][</span><span class="s2">&#34;yesterday_data&#34;</span><span class="p">][</span><span class="s2">&#34;type3&#34;</span><span class="p">])</span><span class="o">+</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2"> 商品点击量：&#34;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">midresult</span><span class="p">[</span><span class="s2">&#34;data&#34;</span><span class="p">][</span><span class="s2">&#34;yesterday_data&#34;</span><span class="p">][</span><span class="s2">&#34;type4&#34;</span><span class="p">]))</span>
</span></span><span class="line"><span class="cl">		<span class="n">i</span><span class="o">+=</span><span class="mi">1</span>
</span></span><span class="line"><span class="cl">	<span class="c1">## print(result)</span>
</span></span><span class="line"><span class="cl">	<span class="k">return</span> <span class="n">result</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">wechat_send</span><span class="p">(</span><span class="n">bot</span><span class="p">,</span><span class="n">result</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">	<span class="c1">## my_friend = bot.friends().search(&#39;lrh&#39;)[0]</span>
</span></span><span class="line"><span class="cl">	<span class="c1">## my_friend.send(result)</span>
</span></span><span class="line"><span class="cl">	<span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1">## 计数器</span>
</span></span><span class="line"><span class="cl">	<span class="k">for</span> <span class="n">group</span> <span class="ow">in</span> <span class="n">grouplist</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">		<span class="n">my_group</span> <span class="o">=</span> <span class="n">bot</span><span class="o">.</span><span class="n">groups</span><span class="p">()</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">group</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="c1">#依次搜索每一个群名称，每次一个</span>
</span></span><span class="line"><span class="cl">		<span class="n">my_group</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">		<span class="nb">print</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">		<span class="nb">print</span><span class="p">(</span><span class="s2">&#34;已发送至群：&#34;</span><span class="o">+</span><span class="n">group</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">		<span class="n">i</span><span class="o">+=</span><span class="mi">1</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">main</span><span class="p">(</span><span class="n">bot</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">	<span class="c1">## 设置最大休眠时间，防止程序长时间占用系统资源</span>
</span></span><span class="line"><span class="cl">	<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">		<span class="n">now_hour</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&#34;%H&#34;</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">localtime</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">		<span class="n">now_min</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&#34;%M&#34;</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">localtime</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">		<span class="c1">## 设置每天 8 点发送</span>
</span></span><span class="line"><span class="cl">		<span class="k">if</span> <span class="n">now_hour</span> <span class="o">&lt;</span> <span class="s2">&#34;08&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">			<span class="n">rest</span> <span class="o">=</span> <span class="mi">8</span> <span class="o">-</span> <span class="nb">int</span><span class="p">(</span><span class="n">now_hour</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">			<span class="n">sleeptime</span> <span class="o">=</span> <span class="p">(</span><span class="n">rest</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="mi">3600</span> <span class="o">+</span> <span class="p">(</span><span class="mi">60</span><span class="o">-</span><span class="nb">int</span><span class="p">(</span><span class="n">now_min</span><span class="p">))</span><span class="o">*</span><span class="mi">60</span>
</span></span><span class="line"><span class="cl">			<span class="nb">print</span><span class="p">(</span><span class="s2">&#34;启动时北京时间为：&#34;</span><span class="o">+</span><span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&#34;%H:%M&#34;</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">localtime</span><span class="p">()),</span><span class="s2">&#34;</span><span class="se">\t</span><span class="s2"> 软件将在&#34;</span><span class="p">,</span><span class="n">rest</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="s2">&#34;小时&#34;</span><span class="p">,</span><span class="nb">int</span><span class="p">((</span><span class="n">sleeptime</span><span class="o">-</span><span class="p">(</span><span class="n">rest</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="mi">3600</span><span class="p">)</span><span class="o">/</span><span class="mi">60</span><span class="p">),</span><span class="s2">&#34;分钟后发送数据&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">			<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">sleeptime</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">		<span class="k">elif</span> <span class="n">now_hour</span> <span class="o">&gt;</span> <span class="s2">&#34;08&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">			<span class="n">rest</span> <span class="o">=</span> <span class="mi">8</span> <span class="o">-</span> <span class="nb">int</span><span class="p">(</span><span class="n">now_hour</span><span class="p">)</span> <span class="o">+</span> <span class="mi">24</span>
</span></span><span class="line"><span class="cl">			<span class="n">sleeptime</span> <span class="o">=</span> <span class="p">(</span><span class="n">rest</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="mi">3600</span> <span class="o">+</span> <span class="p">(</span><span class="mi">60</span><span class="o">-</span><span class="nb">int</span><span class="p">(</span><span class="n">now_min</span><span class="p">))</span><span class="o">*</span><span class="mi">60</span>
</span></span><span class="line"><span class="cl">			<span class="nb">print</span><span class="p">(</span><span class="s2">&#34;启动时北京时间为：&#34;</span><span class="o">+</span><span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&#34;%H:%M&#34;</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">localtime</span><span class="p">()),</span><span class="s2">&#34;</span><span class="se">\t</span><span class="s2"> 软件将在&#34;</span><span class="p">,</span><span class="n">rest</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="s2">&#34;小时&#34;</span><span class="p">,</span><span class="nb">int</span><span class="p">((</span><span class="n">sleeptime</span><span class="o">-</span><span class="p">(</span><span class="n">rest</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="mi">3600</span><span class="p">)</span><span class="o">/</span><span class="mi">60</span><span class="p">),</span><span class="s2">&#34;分钟后发送数据&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">			<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">sleeptime</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">		<span class="k">elif</span> <span class="n">now_hour</span> <span class="o">==</span> <span class="s2">&#34;08&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">			<span class="nb">print</span><span class="p">(</span><span class="s2">&#34;软件明天开始将在每天 8 点发送数据！&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">			<span class="n">result</span><span class="o">=</span><span class="n">get_data</span><span class="p">()</span> <span class="c1">## 获取数据</span>
</span></span><span class="line"><span class="cl">			<span class="n">wechat_send</span><span class="p">(</span><span class="n">bot</span><span class="p">,</span><span class="n">result</span><span class="p">)</span> <span class="c1">## 发送数据</span>
</span></span><span class="line"><span class="cl">			<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">86400</span><span class="o">-</span><span class="nb">int</span><span class="p">(</span><span class="n">now_min</span><span class="p">)</span><span class="o">*</span><span class="mi">60</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="vm">__name__</span><span class="o">==</span><span class="s2">&#34;__main__&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">	<span class="n">bot</span> <span class="o">=</span> <span class="n">Bot</span><span class="p">(</span><span class="n">cache_path</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="c1">## 初始化机器人，扫码登陆</span>
</span></span><span class="line"><span class="cl">	<span class="n">main</span><span class="p">(</span><span class="n">bot</span><span class="p">);</span></span></span></code></pre></td></tr></table>
</div>
</div><h2 id="测试结果">测试结果</h2>
<p>  </p>
<h2 id="程序打包">程序打包</h2>
<p>使用 pyinstaller 工具打包成可执行文件即可。（可执行文件不可跨平台运行，分平台打包）</p>
<blockquote>
<p>目前该程序已经上线测试中 &hellip; 暂未反馈问题</p>
</blockquote>
<h2 id="收获">收获</h2>
<blockquote>
<p>第一次参与实际公司的项目开发，虽然只是一个小的需求设计，但是我在这个过程中也学到了很多，比如通过实际一两周的编程对 Python 的熟悉度远远好过以前在实验室看的一个月视频。<br>
还有就是在此次开发中，也感受到了实际项目开发的团队合作重要性，刚开始拿到这个需求，由于我对 python 和后台，以及数据接口这些基本的操作都不懂，就拿数据获取来说，我一开始一位要自己模拟登陆后台（已知密码），一顿操作、百度等等失败告终，后来涛哥给了一个数据接口，加上涛哥耐心指点，我才终于拿到了数据。<br>
还有在多人合作的项目中，为保持代码的可读性，要尽量的多些注释，还有函数方法的命名尽量具备可读性。比如我代码中的<code>wechat_send()</code>，一开始的命名是<code>wxfs()</code>，经捷哥指正我才改过来的。</p>
</blockquote>]]></description></item><item><title>python 设置程序每天 8 点定时执行任务</title><link>https://lruihao.cn/posts/pysettime/</link><pubDate>Thu, 09 May 2019 23:26:54 +0000</pubDate><author>Lruihao</author><guid>https://lruihao.cn/posts/pysettime/</guid><description><![CDATA[<blockquote>
<p>第一次运行根据程序执行时间，判断程序休眠的时间，尽最大可能休眠，节省系统资源。<br>
第二次运行后直接休眠一天，到每天早上 8 点执行任务。<br>
（该程序需要一直挂着，保持网络不断）</p>
</blockquote>
<div class="highlight" id="id-1"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">time</span>
</span></span><span class="line"><span class="cl"><span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">now_hour</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&#34;%H&#34;</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">localtime</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">    <span class="n">now_min</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&#34;%M&#34;</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">localtime</span><span class="p">())</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">now_hour</span> <span class="o">&lt;</span> <span class="s2">&#34;08&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">rest</span> <span class="o">=</span> <span class="mi">8</span> <span class="o">-</span> <span class="nb">int</span><span class="p">(</span><span class="n">now_hour</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">sleeptime</span> <span class="o">=</span> <span class="p">(</span><span class="n">rest</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="mi">3600</span> <span class="o">+</span> <span class="p">(</span><span class="mi">60</span><span class="o">-</span><span class="nb">int</span><span class="p">(</span><span class="n">now_min</span><span class="p">))</span><span class="o">*</span><span class="mi">60</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;启动时北京时间为：&#34;</span><span class="o">+</span><span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&#34;%H:%M&#34;</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">localtime</span><span class="p">()),</span><span class="s2">&#34;</span><span class="se">\t</span><span class="s2"> 软件将在&#34;</span><span class="p">,</span><span class="n">rest</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="s2">&#34;小时&#34;</span><span class="p">,</span><span class="nb">int</span><span class="p">((</span><span class="n">sleeptime</span><span class="o">-</span><span class="p">(</span><span class="n">rest</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="mi">3600</span><span class="p">)</span><span class="o">/</span><span class="mi">60</span><span class="p">),</span><span class="s2">&#34;分钟后发送数据&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">sleeptime</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">elif</span> <span class="n">now_hour</span> <span class="o">&gt;</span> <span class="s2">&#34;08&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">rest</span> <span class="o">=</span> <span class="mi">8</span> <span class="o">-</span> <span class="nb">int</span><span class="p">(</span><span class="n">now_hour</span><span class="p">)</span> <span class="o">+</span> <span class="mi">24</span>
</span></span><span class="line"><span class="cl">        <span class="n">sleeptime</span> <span class="o">=</span> <span class="p">(</span><span class="n">rest</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="mi">3600</span> <span class="o">+</span> <span class="p">(</span><span class="mi">60</span><span class="o">-</span><span class="nb">int</span><span class="p">(</span><span class="n">now_min</span><span class="p">))</span><span class="o">*</span><span class="mi">60</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;启动时北京时间为：&#34;</span><span class="o">+</span><span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&#34;%H:%M&#34;</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">localtime</span><span class="p">()),</span><span class="s2">&#34;</span><span class="se">\t</span><span class="s2"> 软件将在&#34;</span><span class="p">,</span><span class="n">rest</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="s2">&#34;小时&#34;</span><span class="p">,</span><span class="nb">int</span><span class="p">((</span><span class="n">sleeptime</span><span class="o">-</span><span class="p">(</span><span class="n">rest</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="mi">3600</span><span class="p">)</span><span class="o">/</span><span class="mi">60</span><span class="p">),</span><span class="s2">&#34;分钟后发送数据&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">sleeptime</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">elif</span> <span class="n">now_hour</span> <span class="o">==</span> <span class="s2">&#34;08&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;启动时北京时间为：&#34;</span> <span class="o">+</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&#34;%H:%M&#34;</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">localtime</span><span class="p">()),</span> <span class="s2">&#34;</span><span class="se">\t</span><span class="s2"> 软件将在每天 8 点发送数据！&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="c1"># 以下为定时任务</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;数据&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">86400</span><span class="o">-</span><span class="nb">int</span><span class="p">(</span><span class="n">now_min</span><span class="p">)</span><span class="o">*</span><span class="mi">60</span><span class="p">)</span></span></span></code></pre></td></tr></table>
</div>
</div>]]></description></item></channel></rss>