顯示具有 程式 標籤的文章。 顯示所有文章
顯示具有 程式 標籤的文章。 顯示所有文章

2020年5月13日 星期三

[Python,Sikuli] 如何定時執行程式,來將每日例行工作自動化。

很多時侯我們會希望能夠定時執行某些作業,例如:每日定時上網捉取某些資料、定時關機等,透過將例行工作自動化來節省自已的時間,只要這些作業是固定的,就可以使用 Sikuli 來幫助我們進行自動化的作業。在如何用 Sikuli 來將重複性的工作自動化,讓省下來的時間從事更有生產力的工作並提升生活品質。 這篇文章中,我們提到 Sikuli 基本上是根基於 Python (Jython) 的語法,故想要定時執行某一任務,可參照 Python 上的函式,實現的方式有以下兩種 :

使用 threading 模組中的 Timer


Python 的 threading 模組,是 Python 標準函式庫裡面的模組,所以不用特別安裝即可使用,雖然功能不是很多,但是基本多執行緒程式設計常用的功能它都有,在這我們會用到該模組的 Timer , Timer 是一個執行緒,它可以在我們指定的時間間隔之後執行一個函式。

最簡單使用 Timer,基本上必需具備下列語法: 
  
import threading ;
timer = threading.Timer(timer_start_time, func , func_param);
timer.start();

其中使用 threading .Timer 建立執行緒時,至少需傳入2個參數,第一個參數 timer_start_time為,預計於多久後執行的時間間隔(單位是秒),第二個參數 func 為所要呼叫的函式名,第三個參數 func_param 是呼叫函式的引數(tuple),如果所呼叫的函式沒引數的話可省略。
 
前面提到 Timer 建立執行緒時,所要傳入的第一個參數,為預計於多久後執行的時間間隔,但我們想要的是指定時間執行,這時就需要將指定時間換算為時間間隔,這時可用 datetime 模組進行計算轉算,語法如下:

import datetime;
#取得現在時間
now_time = datetime.datetime.now();
#設定預計執行的時間
next_time = datetime.datetime.strptime(str(next_year)+"-"+str(next_month)+"-"+str(next_day)+str(next_time), "%Y-%m-%d %H:%M:%S");
#計算預定執行的時間與現在的時間間隔,並換算為秒數。
timer_start_time = (next_time - now_time).total_seconds(); 

  以下為示範每日定時關機的程式碼:



使用 sched 模組


sched 模組是 Python 內建的模組,它是一個排程(延時處理機制),每次想要定時執行某任務都必須寫入一個排程,其執行為依序執行,基本上必需具備下列語法: 

import sched;
from datetime import datetime;
import time; 
#初始化 schedule
schedule = sched.scheduler(time.time, time.sleep)
#設定 schedule 及執行
schedule.enter(timer_start_time, 0, func,())
schedule.run();
 
相較於 threading 模組中的 Timer,其步驟多了一步初始化的動作,其設定一樣是預計執行時間的間隔,但其 enter 內的參數不能省略,所以所于呼叫的函式就 算沒有引數,也要給一個空tuple (),同樣示範每日定時關機的程式碼如下:
 
 
可以看到基本上概念跟前一個是差不多的,只不過是應用不同模組來執行。

結語 


對於每日固定執行的工作,我們可以透過 Sikuli 來定時執行 ,將例行工作自動化,將節省下來的時間應用在更有生產力的工作。
 
 

2020年4月20日 星期一

[Python,Sikuli] 如何得到今日的日期及現在的時間

Sikuli 適用 Python 2.7 語法,故針對日期及時間的使用上,可以直接套用 Python提供的套件,基本上常用的有 time 及 datetime 兩個套件,在使用前要先引入。

import datetime,time;
在本次個人使用的情境,是想找出今日的日期的月、日、時間,還有星期幾, 好做後面的處理,可用以下語法得到:
nowtime=datetime.datetime.now();
print "Now:",nowtime;
print "Year:",nowtime.year;
print "Month:",nowtime.month;
print "Day:",nowtime.day;
print "Hour:",nowtime.hour;
print "Minute:",nowtime.minute;
print "Second:",nowtime.second;
print "Weekday:",nowtime.weekday();
print "Weekday:",nowtime.isoweekday();
print "Weekday:",nowtime.strftime("%A");

執行的結果如下:
Now: 2020-04-20 04:54:41.251945
Year: 2020
Month: 4
Day: 20
Hour: 4
Minute: 54
Second: 41
Weekday: 0
Weekday: 1
Weekday: Monday
這裡可以看到星期,如果用 isoweekday 呼叫,星期一會顯示為1 ,如用 weekday 星期一會顯示為 0,也可以用 sttftime 格式化輸出 Monday。如想看線上執行結果可參考下面連結:

請點我


2020年3月11日 星期三

在 WIN 10 下執行 SikuliX 2.0.X 版。

在 Win 10 底下,下載了 Sikuli的 Jar 檔,下載下來後行後說缺少 Jython,無法正常執行,跑去Jython官網下載安裝,確仍然無法正常執行,最後才發現,原來是要去下載  SikuliX 下載頁所附下列 Jython 解釋器。

用於python腳本的Jython解釋器2.7.1(默認)

並將其放到與SikuliX.jar相同的文件夾中。
下次啟動時,它們將被SikuliX識別,並移至SikuliX的擴展文件夾。
因此最好是在第一次使用IDE之前先下載。

[Excel]如何創建自定義函數

在 Excel 內建函式中找不到自已想要的函式怎麼辦?事實上我們可以自已建一個,以下是一個簡單的Excel自定義函數示例,用於將民國年轉為西元: Function 民國轉西元(x As Double) As Double     民國轉西元 = x + 1911 End Func...