牛说(cowsay)
回忆上次内容
- 上次我们研究了shell脚本的编程
- 并且在shell中实现了
- 循环语句
- 延迟命令
- 清屏命令
- python命令
- figlet命令
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_python](https://file.cfanz.cn/uploads/png/2022/12/31/2/cbB3BdQ3J3.png)
cowsay
sudo apt install cowsay
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_python_02](https://file.cfanz.cn/uploads/png/2022/12/31/2/M3J3d1V7DL.png)
利用管道
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_python_03](https://file.cfanz.cn/uploads/png/2022/12/31/2/7faXR9ddX1.png)
整合
#!usr/bin/python3
import time
print(time.asctime())
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_python_04](https://file.cfanz.cn/uploads/png/2022/12/31/2/8E1H561c37.png)
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_字符串_05](https://file.cfanz.cn/uploads/png/2022/12/31/2/bXGH8eV64N.png)
管道原理
![Image text [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_当前路径_06](https://file.cfanz.cn/uploads/png/2022/12/31/2/0b46b44U26.png)
把 cowsay 整合进来
- 把figlet的输出结果再送到cowsay -f moose -n
for a in {1..10}
do
clear
python3 show_time.py | figlet |cowsay -f moose -n
sleep 1s
done
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_当前路径_07](https://file.cfanz.cn/uploads/png/2022/12/31/2/If46J706MR.png)
彩色效果
#安装彩色程序
sudo apt install lolcat
#实验
echo oeasy | lolcat
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_字符串_08](https://file.cfanz.cn/uploads/png/2022/12/31/2/28LX2S5LB3.png)
整合报时
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_python_09](https://file.cfanz.cn/uploads/png/2022/12/31/2/K4cD74e99c.png)
- 有的时候会因为宽度问题
- 感觉很乱
- 我想把时间简化为时分秒
整合时间
for a in {1..100}
do
clear
python3 sleep.py | figlet | cowsay -f moose -n | lolcat
sleep 1s
done
搜索
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_当前路径_10](https://file.cfanz.cn/uploads/png/2022/12/31/2/2768f8805R.png)
- 这个就得修改最初的生成时间的源头
- 修改 show_time.py 文件
show_time.py
#!/usr/bin/python3
import time
localtime = time.strftime(' %H:%M:%S',time.localtime())
print(localtime,end="")
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_python_11](https://file.cfanz.cn/uploads/png/2022/12/31/2/Re23P79d78.png)
具体理解
- str 是字符串 string 的意思
- f 是 format
- strftime 函数 把一个 time.localtime()
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_字符串_12](https://file.cfanz.cn/uploads/jpeg/2022/12/31/2/2M6ed2M666.jpeg)
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_python_13](https://file.cfanz.cn/uploads/png/2022/12/31/2/0dZ65UCda3.png)
#!/usr/bin/python3
import time
print(time.strftime('%H:%M:%S'),end="")
理解格式
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_当前路径_14](https://file.cfanz.cn/uploads/jpeg/2022/12/31/2/WH7E2afGdZ.jpeg)
直接运行 sh
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_python_15](https://file.cfanz.cn/uploads/png/2022/12/31/2/e204QPbYDY.png)
- 这两个搭配起来确实可以运行了!
- 但是循环次数还是受限制
- 可以做一个永远循环的吗?
搜索
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_字符串_16](https://file.cfanz.cn/uploads/png/2022/12/31/2/e5e6951GGR.png)
替换效果
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_当前路径_17](https://file.cfanz.cn/uploads/png/2022/12/31/2/F5472773JS.png)
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_字符串_18](https://file.cfanz.cn/uploads/png/2022/12/31/2/c2Q70eGaac.png)
更多效果
- 也许我们也可以用fortune-zh
- 把偈语打到时钟旁边???
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_字符串_19](https://file.cfanz.cn/uploads/png/2022/12/31/2/71723PMC62.png)
直接运行
- 直接运行的话
-
loop.sh
没有执行权限 - 给他提权
- chmod 改变模式
- u+x 给当前用户增加执行权限
chmod u+x loop.sh
./loop.sh
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_python_20](https://file.cfanz.cn/uploads/jpeg/2022/12/31/2/M4E7KAL870.jpeg)
- 绿色说明可以运行了
- 不过前面还是需要当前路径
./
- 如果就想要
loop.sh
直接运行 - 不要当前路径
./
呢?
设置路径
export PATH=$PATH:.
- 前面的是
PATH
没有$ - 后面的
$PATH
有$
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_字符串_21](https://file.cfanz.cn/uploads/jpeg/2022/12/31/2/078JI0C279.jpeg)
- 就可以直接运行当前路径下的程序了
- 不用在程序前面加上
./
了
~/.zshrc
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_python_22](https://file.cfanz.cn/uploads/png/2022/12/31/2/7e1R2c284W.png)
- 还是可以直接运行loop.sh
- 跳出循环可以用<kbd>ctrl</kbd>+<kbd>c</kbd>
- 把循环放到后台用<kbd>ctrl</kbd>+<kbd>z</kbd>
![图片描述 [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)_python_23](https://file.cfanz.cn/uploads/png/2022/12/31/2/dZRd9d2923.png)
- 啊~终于完成了
- 不容易!!!
- 可以自己做一个小动物吗?
总结
- 从用 shell 直接运行 python 程序
- 到用 shell 循环运行 python 程序
- 把 python 的输出结果用管道交给了 figlet 程序
- 把 figlet 输出的结果用管道给了 cowsay
- 把 cowsay 的结果给了 lolcat
- python3 是脚本解释器
- shell 也是脚本解释器
- 其实我们是在 shell 中利用 python3 的输出结果
- 用 shell 把 python 的粘了起来
- 分时输出的
- 如果能用 python 直接调用 shell 中的命令就好了
- 那个时候 python 就成了胶水的主体
- 完成主循环、延迟等粘合的工作
- 可以自己画一个小动物来报时吗?🤔
- 我们下次再说程序!👋
- github->https://github.com/overmind1980/oeasy-python-tutorial
- gitee->https://gitee.com/overmind1980/oeasypython
- 视频->https://www.bilibili.com/video/BV1CU4y1Z7gQ 作者:oeasy