用Python3、NetCore、Shell分别开发一个Ubuntu版的定时提醒(附NetCore跨平台两种发布方式)
汇总系列:https://www.cnblogs.com/dunitian/p/4822808.html#ai
Python3 与 C# 基础语法对比:https://www.cnblogs.com/dotnetcrazy/p/9102030.html
新增直接运行py文件的补充:请在py前面加上:#!/usr/bin/env python3 然后再执行 sudo chmod +x ./task.py 下次运行直接 ./task.py
平时经常用定时提醒来提高工作效率,到了Linux。。。。蒙圈了,以前C#写的不能跨平台啊,于是就有了这篇文章~(有些人喜欢用番茄工作法,这个算是个福利了)
跳转到Python:https://www.cnblogs.com/dotnetcrazy/p/9111200.html#python
先NetCore吧:(old code:me)
核心代码:Process.Start("notify-send", "友情提醒 10分钟过去了");
原理说明:调用了ubuntu的notify-send的弹窗提醒,自己控制循环和定时
补充知识:RuntimeInformation.IsOSPlatform(OSPlatform.xxx) 这个来判断是什么系统,OSPlatform是一个结构体
定时提醒:Thread.Sleep(new TimeSpan(0, 10, 0));
代码比较简单就不详说了,主要讲讲环境部署+发布
using System;
using System.Threading;
using System.Diagnostics;
using System.Runtime.InteropServices; //Old: https://github.com/dunitian/DNTLive/blob/master/Software/LoTTimer/Program.cs
namespace netcore
{
class Program
{
static void Main(string[] args)
{
while (true)
{
try
{
Console.WriteLine(DateTime.Now.ToString());
Thread.Sleep(new TimeSpan(0, 10, 0));
MyBeep();
}
catch
{
//异常还不结束?
break;
}
}
}
private static void MyBeep()
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
Console.WriteLine("当前系统为Linux");
Process.Start("notify-send", "友情提醒 10分钟过去了");
//用shell启动指定程序+命令
//Process.Start(new ProcessStartInfo("notify-send", "友情提醒 10分钟过去了") { RedirectStandardOutput = true });
}
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
Console.WriteLine("当前系统为Windows");
// frequency:提示音的频率,介于 37 到 32767 赫兹之间。// duration:提示音的持续时间,以毫秒为单位。
Console.Beep(500, 1500);
}
else
{
Console.WriteLine("精力有限,暂不支持");
}
}
}
}来走一个流程:(基本上跟官网走一遍,我贴几个链接和图)
我以前写的文章:https://www.cnblogs.com/dunitian/p/6745562.html#netcore2.1
官方文档(多看看官方文档):https://www.microsoft.com/net/download/linux-package-manager/ubuntu18-04/sdk-current
2.创建一个netcore的console应用:dotnet new console
3.安装VSCode(直接下载安装deb包即可):http://www.cnblogs.com/dunitian/p/6661644.html
4.安装VSCode的C#扩展
5.打开刚才那个文件夹,F5试运行一下,新版的貌似不用自己配置运行路径什么的了
6.刚才代码贴了,coding一下。调试运行什么的和win下没什么大区别
7.1发布吧,讲一下官方推荐的发布方式(适合开发人员),到项目目录下,Ctrl+ALT+T调出终端==》 dotnet publish –c release
参考:https://docs.microsoft.com/zh-cn/dotnet/core/deploying/deploy-with-cli
这种轻量级方式发布,把这两个文件弄出去就ok了
运行效果:dotnet xxx.dll,如果你改了程序名字,对应配置名字也记得改哦~
7.2发布第二种方式【很多人不是开发人员也不想装runtime】(指定应用程序运行时(自宿主应用),这种方式将会把指定平台的Core CLR打包进去):
发布前先做一件事情,添加你需要支持的哪些系统,我这边win10和Ubuntu18就好了(别忘了)
在<PropertyGroup>标签里面添加<RuntimeIdentifiers>win10-x64;ubuntu.18.04-x64;</RuntimeIdentifiers>
系统命名以及系统支持参考:(貌似Android也是支持的)
https://docs.microsoft.com/zh-cn/dotnet/core/rid-catalog
https://github.com/dotnet/corefx/blob/master/pkg/Microsoft.NETCore.Platforms/runtime.json
修复依赖+发布指定系统的runtime:dotnet publish -c Release -r ubuntu.18.04-x64
其实netcore2.x系列不用再输入restore了,它会自动执行restore
自托管的包挺大的
发现自动生成了个netcore无后缀文件,而且是可执行文件【为基础薄弱的同志普及下:1.看颜色 2.ll 查看有没有执行权限】,直接运行就OK了
来试着发布一个win10的:dotnet publish -c Release -r win10-x64
拖到win10来测试~ok,可以跨平台(其他平台一样,发布的时候换下操作系统即可)
这次轮到Python了
其实核心代码都差不多,几句话解决
import os
import time while True:
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
time.sleep(600)
os.system("notify-send 友情提醒 10分钟过去了")
运行(其实你可以自己把他设置为可执行程序【chmod +x ./task.py】,这样在终端中直接./task.py就运行了)
新增补充:记得py文件前面加上:#!/usr/bin/env python3
Shell:(有些人在微信公众号问我,shell怎么获取时间,我这边改了下shell代码)【其实shell方便之处在于直接执行系统命令,系统获取时间:date,那shell加一行即可】
while :
do
date
sleep
echo -e '\a'
notify-send 友情提醒 已经过了10分钟了
done
知识点补充:
直接输入
python
进入交互模式,相当于启动了Python解释器,但是等待你一行一行地输入源代码,每输入一行就执行一行。直接运行
.py
文件相当于启动了Python解释器,然后一次性把.py
文件的源代码给执行了,你是没有机会以交互的方式输入源代码的。
附录(Python加强版)
V0.2.1 add 音乐断点续播、修复锁屏偶尔出现的屏幕旋转bug
#!/usr/bin/env python3 import os
import time
from multiprocessing.dummy import Pool def move_screen():
"""旋转屏幕来提示"""
os.system("xrandr -o left") # 左旋转90度
# 下面两行应该不用加,防止锁屏时出现Bug,就加上了
time.sleep(2)
os.system("xrandr -o normal") # 恢复正常 # 大概多少秒(n的整数倍较好)PS:def reset(n)
global_how_time = 240
global_time = 0 # 开始播放时间(全局临时变量) def play_music():
"""播放音乐来提醒"""
global global_time, global_how_time
# os.system("mpv ~/音乐/莫问明天.mp3")
if global_time > global_how_time:
global_time = 0 # 防止超出时间
os.system(f"mpv ~/音乐/莫问明天.mp3 --start={global_time}") def reset(n=1):
"""友情提醒"""
os.system("xrandr -o normal") # 恢复正常
time.sleep(n)
global global_time
global_time += n # 继续播放
os.system("pkill mpv") # 关闭音乐
print("等待下一次拥抱...") if __name__ == "__main__":
pool = Pool()
while True:
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
time.sleep(1200) # 20 分钟
os.system("notify-send 逆天友情提醒 20分钟过去了")
pool.apply_async(play_music)
pool.apply_async(move_screen)
reset(30) # 休息30s
V0.2.0 add 音乐播放、更明显的提示
eg:屏幕旋转,注意恢复命令:xrandr -o normal
#!/usr/bin/env python3 import os
import time
from multiprocessing.dummy import Pool def move_screen():
"""旋转屏幕来提示"""
os.system("xrandr -o left") # 左旋转90度
# time.sleep(2)
# os.system("xrandr -o normal") # 恢复正常 def play_music():
"""播放音乐来提醒"""
os.system("mpv ~/音乐/莫问明天.mp3") def reset(n=1):
"""友情提醒"""
os.system("xrandr -o normal") # 恢复正常
time.sleep(n)
os.system("pkill mpv") # 关闭音乐
print("等待下一次拥抱...") if __name__ == "__main__":
pool = Pool()
while True:
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
os.system("notify-send 逆天友情提醒 10分钟过去了")
pool.apply_async(play_music)
pool.apply_async(move_screen)
reset(10)
time.sleep(600)
我稍微说下Linux日常使用的体验,可以略过这段:(这段放最后吧,不然认为我是打广告的就不太好了o((>ω< ))o)
以前开发环境都是Win10或者Win系列,后来Net跨平台了,慢慢的开发专用笔记本也换成了Ubuntu,关于Linux基础和环境等就不说了,可以看我以前写的文章(https://www.cnblogs.com/dunitian/p/4822808.html#linux)
Linux基本上还用的惯,之前开发工具突然间从VS变成了JetBrains Rider (Netcore的Console程序在linux下有时候有些莫名错误,所以才搭上了Rider)和 VSCode,陡然间稍有不适,用了几天就熟悉了。所以开发相关的Linux基本上和Win差不多。
关键是日常比较蛋疼,贴个常用deb安装包,https://pan.baidu.com/s/1kVI8eft 这个就不细说了可以参考我以前在Ubuntu16.04上发的文章(http://www.cnblogs.com/dunitian/p/6670560.html),截图自带的勉强能用Alt+PrtScr,用不惯可以用国产deepin-screenshot或者用hotshots也行。播放器可以自己安装一下:sudo apt-get install smplayer
其他的其实也没啥了,文档有WPS,音乐有网易云,输入法有搜狗,词典可以选择有道,浏览器反正谷歌嘛。暂时不需要Linux版的录屏软件(有好的可以推荐哦~)【记得我前面讲dock的时候提过一款(http://www.cnblogs.com/dunitian/p/6681832.html)】
回头可能考虑再开发一个水印工具,以前开发的用惯了:https://github.com/dunitian/DNTLive/tree/master/Software/WaterMarkAPP
好久没写文章了,写个文章好慢。。。
用Python3、NetCore、Shell分别开发一个Ubuntu版的定时提醒(附NetCore跨平台两种发布方式)的更多相关文章
- 巨蟒python全栈开发数据库前端6:事件onclick的两种绑定方式&&onblur和onfocus事件&&window.onload解释&&小米商城讲解
1.回顾上节内容(JavaScript) 一.JavaScript概述 1.ECMAScript和JavaScript的关系 2.ECMAScript的历史 3.JavaScript是一门前后端都可以 ...
- Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比--转载
在加载大量数据的时候,经常会用到异步加载,所谓异步加载,就是把耗时的工作放到子线程里执行,当数据加载完毕的时候再到主线程进行UI刷新.在数据量非常大的情况下,我们通常会使用两种技术来进行异步加载,一 ...
- Windows和Ubuntu双系统,修复UEFI引导的两种办法
查看ubuntu是否是从 efi/uefi 启动的方法: 若 /sys/firmware/efi 存在则是,否则不是.shell命令: [ -d /sys/firmware/efi ] && ...
- 【Shell脚本学习1】Shell简介:什么是Shell,Shell命令的两种执行方式
Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释 ...
- 【转】shell 教程——01 Shell简介:什么是Shell,Shell命令的两种执行方式
Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释 ...
- Shell简介:什么是Shell,Shell命令的两种执行方式
Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释 ...
- Python3 多线程的两种实现方式
最近学习 Python3 ,希望能掌握多线程的使用,在此做个笔记.同时也希望Python 牛人指点错误.关于线程的概念,前面简单总结了一下 java 的多线程,传送门:java 多线程概念,三种创建多 ...
- shell教程-001:shell简介 什么是shell,shell命令的两种执行方式
Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的. Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解 ...
- Android开发——弹性滑动的两种实现方式
0. 前言 欢迎转载,转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52538723 我们在Android开发--View滑动的三 ...
随机推荐
- Azure系列2.1.9 —— CloudBlob
(小弟自学Azure,文中有不正确之处,请路过各位大神指正.) 网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习 ...
- [转帖]一个ip对应多个域名多个ssl证书配置-Nginx实现多域名证书HTTPS
一个ip对应多个域名多个ssl证书配置-Nginx实现多域名证书HTTPS https://home.cnblogs.com/u/beyang/ 一台服务器,两个域名 首先购买https,获取到CA证 ...
- Java案例-用户注册邮箱绑定激活功能实现
<–start–> 需求描述:当客户打开收到邮箱激活码的邮件,点击激活链接,正确填写激活码后就会完成邮箱激活的步骤. 在后台编程代码编写中,有以下几个要点: ① 接收客户的手机号码和邮箱激 ...
- jenkins了解一下,讲一下jenkins这个鬼东西
一.jenkins是干什么的? jenkins是一个免费的集成工具,它是基于java开发的.用来做自动化部署,傻瓜化操作. 一般的项目部署流程: 开发代码——>功能测试——>打包(使用ma ...
- Client将数据读写HDFS流程
HDFS介绍 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表的论文翻版的. 什么是分布式文件系统 分布式文件系统(Dist ...
- python数学第十天【最大似然估计】
- CentOS7 搭建影梭服务器
安装Python包管理工具 yum install python-setuptools && easy_install pip 安装Shadowsocks pip install sh ...
- 【数学建模】day05-微分方程建模
很多问题,归结起来是微分方程(组)求解的问题.比如:为什么使用三级火箭发射卫星.阻滞增长人口模型的建立…… MATLAB提供了良好的微分方程求解方案. 一.MATLAB求微分方程的符号解 matlab ...
- python第三方库的四种安装方法
1,直接pip install安装 2,在python-->default setting-->project interprer-->add 3,在这个链接里找到需要的包,下载 h ...
- SQL Server使用笔记
1.连接字符串 SQL Server 身份验证,如:"server=yqzhu-peter;database=WindWMNew1_DB;uid=sa;pwd=ABcd1234;Connec ...