用Python3、NetCore、Shell分別開發一個Ubuntu版的定時提醒(附NetCore跨平臺兩種釋出方式)
新增直接執行py檔案的補充:請在py前面加上:#!/usr/bin/env python3 然後再執行 sudo chmod +x ./task.py 下次執行直接 ./task.py
平時經常用定時提醒來提高工作效率,到了Linux。。。。蒙圈了,以前C#寫的不能跨平臺啊,於是就有了這篇文章~(有些人喜歡用番茄工作法,這個算是個福利了)
核心程式碼: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("精力有限,暫不支援"); } } } }來走一個流程:(基本上跟官網走一遍,我貼幾個連結和圖)
2.建立一個netcore的console應用:dotnet new console
4.安裝VSCode的C#擴充套件
5.開啟剛才那個資料夾,F5試執行一下,新版的貌似不用自己配置執行路徑什麼的了
6.剛才程式碼貼了,coding一下。除錯執行什麼的和win下沒什麼大區別
7.1釋出吧,講一下官方推薦的釋出方式(適合開發人員),到專案目錄下,Ctrl+ALT+T調出終端==》 dotnet publish –c release
這種輕量級方式釋出,把這兩個檔案弄出去就ok了
執行效果:dotnet xxx.dll
,如果你改了程式名字,對應配置名字也記得改哦~7.2釋出第二種方式【很多人不是開發人員也不想裝runtime】(指定應用程式執行時(自宿主應用),這種方式將會把指定平臺的Core CLR打包進去):
釋出前先做一件事情,新增你需要支援的哪些系統,我這邊win10和Ubuntu18就好了(別忘了)
在<PropertyGroup>標籤裡面新增<RuntimeIdentifiers>win10-x64;ubuntu.18.04-x64;</RuntimeIdentifiers>
系統命名以及系統支援參考:(貌似Android也是支援的)
修復依賴+釋出指定系統的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 600 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)】
好久沒寫文章了,寫個文章好慢。。。
相關推薦
用Python3、NetCore、Shell分別開發一個Ubuntu版的定時提醒(附NetCore跨平臺兩種釋出方式)
新增直接執行py檔案的補充:請在py前面加上:#!/usr/bin/env python3 然後再執行 sudo chmod +x ./task.py 下次執行直接 ./task.py 平時經常用定時提醒來提高工作效率,到了Linux。。。。蒙圈了,以前C#寫的不能跨平臺
用Python和NetCore、Shell分別開發一個Ubuntu版的定時提醒(附NetCore跨平臺的兩種發布方式)
not 代碼 程序 異常 read bsp install dia alt Python3 與 C# 基礎語法對比:https://www.cnblogs.com/dotnetcrazy/p/9102030.html 平時經常用定時提醒來提高工作效率,到了Linux。。
.lib .dll 區別介紹、使用(dll的兩種引入方式)
.lib .dll檔案都是程式可直接引用的檔案,前者就是所謂的庫檔案,後者是動態連結庫(Dynamic Link Library)也是一個庫檔案。而.pdb則可以理解為符號表檔案。DLL(Dynamic Link Library)檔案為動態連結庫檔案,又稱為“應用程式擴充套件”,是一種軟體檔案型別。在Wind
14、Fibonacci的兩種實現方式
等於 cheng pos art log ref clas gpo tar 斐波納契數列,又稱黃金分割數列,指的是這樣一個數列:1、1、2、3、5、8、13、21、……在數學上,斐波納契數列以如下被以遞歸的方法定義:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n&
求第n個斐波那契數(分別用遞迴和非遞迴兩種方法求解)
斐波那契數列指的是這樣一個數列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55……這個數列從第3項開始,每一項都等於前兩項之和。 這裡分別用遞迴和非遞迴的方法實現: 遞迴 #define _CRT_SECURE_NO_WARNINGS 1 #include&l
單例的兩種實現方式、多個版本及利弊對照
單例設計模式,顧明思議,只有一個例項,先交代重要一點,為防止外界對該類進行例項化,需要把類的建構函式宣告為私有的,這樣大家對原理理解更深入些。 1、餓漢式 餓漢模式單例程式碼,經典,可用,無需改進。 package com.sing
用Django框架開發一個簡單的企業網站(四)
現在通過後臺可以新建文章分類,並且編輯儲存文章了;由於Django預設的大容量文字欄位是通過一個textarea作為輸入方式,所以我們還需要引入一個富文字編輯器,這裡我推薦KindEditor(http://kindeditor.net/demo.php),配置簡單,功能也齊全。 將下載好的
用Django框架開發一個簡單的企業網站(二)
現在已經搭建好了網站的基本框架,繼續完善後臺功能,既然要寫後臺,自然要準備好資料庫。 資料庫我選擇熟悉的mysql,用的navicat視覺化管理工具,這裡我建立了一個my_web的資料庫;建立好資料庫後在專案目錄下的settings.py檔案內配置資料庫連線資訊: DATABASE
用Django框架開發一個簡單的企業網站(一)
Python有許多不同的 Web 框架,Django是重量級選手中最有代表性的一位,許多成功的網站和APP都基於Django。 既然如此,那麼…… 老規矩,先安裝Django框架,我的Django版本: 安裝完成後在想儲存專案的目錄下執行命令,新建一個專案: djan
用Django框架開發一個簡單的企業網站(三)
接著之前的專案繼續深入開發,後臺和資料庫已經搞定,現在可以寫我們網站的功能了;就寫一個最簡單的功能,釋出企業新聞。開啟app內的models.py檔案,寫兩個資料模型類: from django.db import models class NewsClass(models.Model)
周傲英、熊輝、李飛飛邀您共享大資料技術嘉年華!(附大會終版日程)
全球數字化趨勢當前,大資料可謂向陽而生蓬勃發展。為了直擊大資料學習發展中的痛點與瓶頸,深入解析熱門技術在行業中的實踐和落地,2018 年12 月 6-8 日,由中國計算機學會主辦,CCF大資料專家委員會承辦,CSDN、中科天璣資料科技股份有限公司協辦的 2018 中國大資料技術大會(BDT
FastCGI特點原理、nginx與php-fpm兩種通訊方式對比
一、FastCGI特點: 1、HTTP伺服器和動態指令碼語言間通訊的介面或工具 2、可把動態語言解析和HTTP伺服器分離I 3、Nginx、Apache、Lighttpd,以及多數動態語言 都支援FastCGI 4、FastCGI介面方式採用 C/S結構,分為客戶端(
3、jq動畫執行過程中不讓重複點選(即執行完動畫後點擊)
$(".btnoff").click(function(){ var offbtnStatus = false;//初始化狀態,給狀態false,不讓連續點選 if(offbtnStatus){//如果狀態為真,說明函式未執行完,return跳出 return;
多執行緒中的方法、兩種實現方式、匿名內部類建立多執行緒,執行緒安全問題的解決、
多執行緒兩種實現方式: 方式一: 繼承Thread類的方式 方式二: 實現Runnable介面的方式。 方式一: 步驟: // 1. 定義一個類,然後繼承Thread //
二、C++迭代器的兩種實現方式 (Range for和C#、Java中的foreach)
一、迭代器概述 這個標題其實有點“標題黨”的含義,因為C++在標準庫中的實現迭代器的方式只有一種,也就是為類定義begin()和end()函式,C++11增加了range for語句,可以用來遍歷迭代器中的元素。實現迭代器的第二種方式,就是用C++模擬C#和Java中的
Android基礎(四)——Activity的兩種啟動方式、Intent初探
一、啟動Activity 一個activity跳轉到另外一個activity中的最簡單的方式就是使用下面的Activity方法: public void startActivity(Intent in
自動補全、自動提示的兩種實現方式(前端實現與後端實現)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="style
多執行緒,兩種實現方式(繼承Thread,實現Runnable介面),設定獲取名字,同步程式碼塊、方法,死鎖
1.多執行緒的引入(瞭解) 1.什麼是執行緒 執行緒是程式執行的一條路徑, 一個程序中可以包含多條執行緒 多執行緒併發執行可以提高程式的效率, 可以同時完成多項工作 2.多執行緒的應用場景 紅蜘蛛同時共享螢幕給多個電腦 迅雷開啟多條執行緒一起下載 Q
兩種引導方式(MBR 、 uefi)下安裝ubuntu系統
1. 下載Ubuntu 14.04映象軟體;製作U盤啟動盤;、 2.保證有空閒空間 30G以上 ,插入Ubuntu啟動盤 USB啟動 (安裝過程) 3.分配空間 磁碟為MBR引導方式 /boot 200M空間 系統引導 /
2、php的錯誤異常處理(自定義php的錯誤處理方式)
一、概述 自定義錯誤報告的處理方式,可以完全繞過標準的php錯誤處理函式,這樣就可以按照自己定義的 格式列印錯誤報告,或改變錯誤報告列印的位置,以下幾種情況可以考慮自定義錯誤處理。