彙總系列:http://www.javashuo.com/article/p-dojeygnv-gw.htmlhtml
Python3 與 C# 基礎語法對比:http://www.javashuo.com/article/p-dwdjxhac-g.html
python
新增直接運行py文件的補充:請在py前面加上:#!/usr/bin/env python3 而後再執行 sudo chmod +x ./task.py 下次運行直接 ./task.py
linux
平時常常用定時提醒來提升工做效率,到了Linux。。。。蒙圈了,之前C#寫的不能跨平臺啊,因而就有了這篇文章~(有些人喜歡用番茄工做法,這個算是個福利了)git
跳轉到Python:http://www.javashuo.com/article/p-wsvejssb-q.htmlgithub
先NetCore吧:(old code:me)shell
核心代碼:Process.Start("notify-send", "友情提醒 10分鐘過去了");json
原理說明:調用了ubuntu的notify-send的彈窗提醒,本身控制循環和定時ubuntu
補充知識: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("精力有限,暫不支持"); } } } }來走一個流程:(基本上跟官網走一遍,我貼幾個連接和圖)
我之前寫的文章:http://www.javashuo.com/article/p-gamwcnkv-em.html
官方文檔(多看看官方文檔):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 600 echo -e '\a' notify-send 友情提醒 已通過了10分鐘了 done
知識點補充:
直接輸入
python
進入交互模式,至關於啓動了Python解釋器,可是等待你一行一行地輸入源代碼,每輸入一行就執行一行。直接運行
.py
文件至關於啓動了Python解釋器,而後一次性把.py
文件的源代碼給執行了,你是沒有機會以交互的方式輸入源代碼的。
#!/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
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基礎和環境等就不說了,能夠看我之前寫的文章(http://www.javashuo.com/article/p-dojeygnv-gw.html)
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
很久沒寫文章了,寫個文章好慢。。。