用Python3、NetCore、Shell分别开发一个Ubuntu版的定时提醒(附NetCore跨平台两种发布方式)
Python3 与 NetCore基础语法对比:https://www.cnblogs.com/dunitian/p/9103673.html
彩色版最新版:https://www.cnblogs.com/dotnetcrazy/p/9111200.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:
while : do sleep 600 echo time past notify-send 友情提醒 已经过了10分钟了 echo -e '\a' done
我稍微说下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)】

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
BackSwap恶意软件使用新技术来清空银行帐户
银行恶意软件(也称为banker)最近几年的攻击活动在减少,其中一个原因是反恶意软件公司和web浏览器开发商不断扩大其防范银行木马攻击的保护机制的范围。这导致传统的银行恶意软件欺诈技术变得更加复杂,所以恶意软件作者将其时间和资源转移到了开发易于制造和更有利可图的其他恶意软件,如勒索软件、密挖矿神器和加密货币窃取程序。 我们发现了一种新的银行恶意软件家族,它使用创新的技术来操控浏览器:恶意软件不是使用复杂的过程注入方法来监视浏览活动,而是钩住关键窗口消息循环事件,以便检查银行活动窗口对象的值。 一旦检测到有银行业务活动,恶意软件就会通过浏览器的JavaScript控制台或直接在地址栏中将JavaScript插入到网页中。所有这些操作都是在用户不知情的情况下完成的。这是一个看似简单的技巧,但却击败了针对复杂攻击的高级浏览器保护机制。 一、简介 早在今年1月,我们就注意到这个银行恶意软件背后的组织正在传播他们早期的项目——其中之一就是恶意软件,它通过替换剪贴板中的钱包地址来窃取加密货币。该组织专注于剪贴板恶意软件几个月,并最终推出了第一版银行恶意软件,在3月13日由ESET检测为Win32 ...
-
下一篇
彻底理解Java中的基本数据类型转换(自动、强制、提升)
image 说基本数据类型转换之前,先了解下 Java 中的 8 种基本数据类型,以及它们的占内存的容量大小和表示的范围,如下图所示。 image 重新温故了下原始数据类型,现在来解释下它们之间的转换关系。 自动类型转换 自动类型转换是指:数字表示范围小的数据类型可以自动转换成范围大的数据类型。 如: long l = 100; int i = 200; long ll = i; 具体自动转换如如下图所示。 image 实线表示自动转换时不会造成数据丢失,虚线则可能会出现数据丢失问题。 自动转换也要小心数据溢出问题,看下面的例子。 int count = 100000000; int price = 1999; long totalPrice = count * price; 编译没任何问题,但结果却输出的是负数,这是因为两个 int 相乘得到的结果是 int, 相乘的结果超出了 int 的代表范围。这种情况,一般把第一个数据转换成范围大的数据类型再和其他的数据进行运算。 int count = 100000000; int price = 1999; long totalPrice ...
相关文章
文章评论
共有0条评论来说两句吧...