1. 程式人生 > >用Python3、NetCore、Shell分別開發一個Ubuntu版的定時提醒(附NetCore跨平臺兩種釋出方式)

用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)】

 好久沒寫文章了,寫個文章好慢。。。

相關推薦

Python3NetCoreShell分別開發一個Ubuntu定時提醒NetCore跨平臺釋出方式

新增直接執行py檔案的補充:請在py前面加上:#!/usr/bin/env python3 然後再執行 sudo chmod +x ./task.py 下次執行直接 ./task.py 平時經常用定時提醒來提高工作效率,到了Linux。。。。蒙圈了,以前C#寫的不能跨平臺

Python和NetCoreShell分別開發一個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

14Fibonacci的實現方式

等於 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結構,分為客戶端(

3jq動畫執行過程中不讓重複點選即執行完動畫後點擊

$(".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空間 系統引導   /  

2php的錯誤異常處理自定義php的錯誤處理方式

 一、概述 自定義錯誤報告的處理方式,可以完全繞過標準的php錯誤處理函式,這樣就可以按照自己定義的 格式列印錯誤報告,或改變錯誤報告列印的位置,以下幾種情況可以考慮自定義錯誤處理。