1 of 43

Keeping time, scheduling tasks, and launching programs

2 of 43

การจัดการเวลา การตั้งเวลางาน และการเรียกใช้งานโปรแกรม�

  • การรันโปรแกรมในขณะที่คุณนั่งอยู่หน้าคอมพิวเตอร์เป็นเรื่องปกติ แต่ในหลายกรณี การให้โปรแกรมทำงานเองโดยไม่ต้องมีการควบคุมโดยตรงก็มีประโยชน์อย่างมาก นาฬิกาของคอมพิวเตอร์สามารถใช้ตั้งเวลาให้โปรแกรมทำงานได้ เช่น
    • ทำงานในวันที่และเวลาที่กำหนด
    • ทำงานซ้ำเป็นช่วงเวลา (interval)
  • ตัวอย่าง
    • โปรแกรมตรวจสอบเว็บไซต์ทุก ๆ 1 ชั่วโมง
    • โปรแกรมประมวลผลหนัก (CPU-intensive) ตอนตี 4 ขณะที่คุณนอนหลับ
    • ในภาษา Python โมดูล time และ datetime ถูกออกแบบมาเพื่อรองรับงานเหล่านี้
  • ในภาษา Python โมดูล time และ datetime ถูกออกแบบมาเพื่อรองรับงานเหล่านี้นอกจากนี้ คุณยังสามารถเขียนโปรแกรมเพื่อเรียกใช้งานโปรแกรมอื่นตามเวลาที่กำหนดได้ โดยใช้โมดูล subprocess และ threading

3 of 43

The time Module

นาฬิกาของระบบคอมพิวเตอร์จะถูกตั้งค่าให้มี

  • วันที่
  • เวลา
  • เขตเวลา (time zone)

โมดูล time ซึ่งเป็นโมดูลพื้นฐานใน Python ช่วยให้โปรแกรมสามารถอ่านเวลาปัจจุบันจากระบบได้

ฟังก์ชันที่สำคัญ ได้แก่

  • time.time() → คืนค่า epoch timestamp
  • time.sleep() → หยุดการทำงานของโปรแกรมชั่วคราว

4 of 43

Epoch Timestamp คืออะไร

  • Unix epoch คือจุดอ้างอิงเวลาที่ใช้กันทั่วไปในโปรแกรม�📍 คือเวลา: 00:00:00 วันที่ 1 มกราคม 1970 (UTC)
  • ฟังก์ชัน time.time() จะคืนค่า�👉 จำนวนวินาทีตั้งแต่ Unix epoch จนถึงเวลาปัจจุบัน�👉 อยู่ในรูปแบบเลขทศนิยม (float)

หมายความว่า:�👉 มีเวลาผ่านไปกี่วินาทีตั้งแต่ปี 1970 จนถึงตอนนี้

5 of 43

แปลงเวลาให้อ่านง่าย

  • ค่า timestamp อ่านยากสำหรับมนุษย์ ใช้ฟังก์ชัน: time.ctime()

  • หรือใช้ร่วมกับ timestamp:

6 of 43

การวัดเวลาในการทำงานของโปรแกรม (Profiling)

  • เราสามารถใช้ timestamp เพื่อวัดว่า โค้ดใช้เวลาทำงานนานเท่าไร
  • หลักการ:
    • เก็บเวลาเริ่มต้น
    • รันโปรแกรม
    • เก็บเวลาสิ้นสุด
    • หาผลต่าง

7 of 43

การวัดเวลาในการทำงานของโปรแกรม (Profiling)

คำอธิบาย

  • ฟังก์ชัน calculate_product() → คูณเลขตั้งแต่ 1 ถึง 100,000
  • start_time → เวลาเริ่ม
  • end_time → เวลาจบ
  • นำมาลบกันเพื่อหาเวลาที่ใช้

8 of 43

Pausing Programs (การหยุดโปรแกรมชั่วคราว)

  • หากคุณต้องการหยุดการทำงานของโปรแกรมชั่วคราว สามารถใช้ฟังก์ชัน time.sleep() ได้ โดยส่งจำนวนวินาทีที่ต้องการให้โปรแกรมหยุดลงไป

9 of 43

Pausing Programs (การหยุดโปรแกรมชั่วคราว)

  • ฟังก์ชัน time.sleep() จะเป็นแบบ blocking หมายความว่า: โปรแกรมจะ “หยุดทั้งหมด” ไม่สามารถรันคำสั่งอื่นได้จนกว่าจะครบเวลาที่กำหนด
  • เช่น:
  • time.sleep(5)
  • 👉 จะต้องรอ 5 วินาที ก่อนที่โปรแกรมจะทำงานต่อ

10 of 43

Rounding Numbers (การปัดตัวเลข)

  • เมื่อทำงานกับเวลา ค่าที่ได้มักเป็น เลขทศนิยมยาว ๆ (float) เช่น: 1773814036.6147408
  • เพื่อให้อ่านง่ายขึ้น สามารถใช้ฟังก์ชัน round() ได้

ปัดทศนิยม 2 ตำแหน่ง

11 of 43

Project : Super Stopwatch

  • โปรแกรมจับเวลาแบบง่าย (Stopwatch) สมมติว่าคุณต้องการติดตามว่าใช้เวลาไปกับงานน่าเบื่อที่ยังไม่ได้ทำ automation มากแค่ไหน
  • โปรแกรมนี้จะทำงานดังนี้:
  • ใช้ time.time() เพื่อดึงเวลาปัจจุบัน (timestamp)
  • เก็บเวลา:
    • ตอนเริ่มโปรแกรม
    • ตอนเริ่มแต่ละรอบ (lap)
  • นับจำนวนรอบ (lap counter)
  • ทุกครั้งที่กด ENTER:
    • คำนวณเวลาที่ใช้ในรอบนั้น
    • คำนวณเวลารวม
  • ใช้ CTRL + C เพื่อออกจากโปรแกรม

12 of 43

Project : Super Stopwatch

  • Step 1: เตรียมโปรแกรม
  • โปรแกรมต้อง:
    • import โมดูล time
    • แสดงคำแนะนำให้ผู้ใช้
    • เริ่มจับเวลาเมื่อกด ENTER

13 of 43

Project : Super Stopwatch

  • Step 2: จับเวลาแต่ละรอบ (Lap)
  • ตอนนี้เราจะ:
  • รอให้ผู้ใช้กด ENTER
  • คำนวณเวลาแต่ละรอบ
  • คำนวณเวลารวม
  • แสดงผล

14 of 43

โมดูล datetime

  • โมดูล time เหมาะสำหรับการทำงานกับค่าเวลาแบบ Unix timestamp
  • แต่ถ้าคุณต้องการ:
    • แสดงวันที่ให้อ่านง่าย
    • คำนวณเกี่ยวกับวันที่ (เช่น 205 วันที่แล้ว หรืออีก 123 วันข้างหน้า)
  • 👉 ควรใช้โมดูล datetime

15 of 43

โมดูล datetime

  • โมดูล datetime มีชนิดข้อมูลของตัวเองชื่อว่า�👉 datetime
  • ซึ่งใช้แทน�👉 “ช่วงเวลาหนึ่งที่แน่นอน” (specific moment in time)

16 of 43

โมดูล datetime

🔹 สร้างวันที่เอง

dt = datetime.datetime(2026, 10, 21, 16, 29, 0)

🔹 เข้าถึงข้อมูลภายใน

dt.year, dt.month, dt.day�# (2026, 10, 21)�dt.hour, dt.minute, dt.second�# (16, 29, 0)

17 of 43

แปลง Timestamp -> datetime

  • สามารถแปลงค่า Unix timestamp เป็น datetime ได้ด้วย:

18 of 43

การเปรียบเทียบ datetime

  • สามารถเปรียบเทียบ datetime ได้เหมือนตัวเลข
  • 👉 เวลาที่ “มาทีหลัง” จะมีค่ามากกว่า

19 of 43

การแทน “ช่วงเวลา” ด้วย timedelta

  • ในโมดูล datetime นอกจากจะใช้แทน “เวลา ณ จุดหนึ่ง” แล้ว ยังมีชนิดข้อมูลอีกแบบคือ
  • 👉 timedelta ซึ่งใช้แทน�👉 “ช่วงเวลา (duration)” เช่น 10 วัน, 5 ชั่วโมง

20 of 43

การคำนวณวันที่ (Date Arithmetic)

  • สามารถใช้ timedelta บวก/ลบกับ datetime ได้
  • ตัวอย่าง: อีก 1000 วัน

21 of 43

การลบเวลา

22 of 43

การหยุดโปรแกรมจนกว่าจะถึงวันที่กำหนด

  • ฟังก์ชัน time.sleep() ใช้สำหรับหยุดโปรแกรมเป็นจำนวนวินาทีที่กำหนด
  • แต่ถ้าต้องการให้โปรแกรม “หยุดรอจนถึงวันที่/เวลาหนึ่ง”�👉 สามารถใช้ร่วมกับ while loop ได้

23 of 43

การแปลง datetime เป็นข้อความ

  • ค่า datetime หรือ timestamp�👉 อ่านยากสำหรับมนุษย์
  • จึงใช้:�👉 strftime() (string format time)
  • strftime()
    • ใช้แปลง datetime → string
    • ตัวอักษร f = format

24 of 43

รูปแบบ (Directive) ที่ใช้บ่อย

Directive

ความหมาย

%Y

ปี (เช่น 2026)

%y

ปีแบบ 2 หลัก

%m

เดือน (01–12)

%B

ชื่อเดือนเต็ม

%b

ชื่อเดือนย่อ

%d

วัน

%A

วันในสัปดาห์ (เต็ม)

Directive

ความหมาย

%a

วันย่อ

%H

ชั่วโมง (24 ชม.)

%I

ชั่วโมง (12 ชม.)

%M

นาที

%S

วินาที

%p

AM / PM

%%

เครื่องหมาย %

25 of 43

ตัวอย่าง รูปแบบ (Directive) ที่ใช้บ่อย

26 of 43

การแปลง “ข้อความ” เป็น datetime

  • หากคุณมีข้อมูลวันที่ในรูปแบบ ข้อความ (string) เช่น:
  • '2026/10/21 16:29:00'
  • 'October 21, 2026'
  • และต้องการแปลงเป็น datetime
  • 👉 ให้ใช้ฟังก์ชัน
  • datetime.datetime.strptime()

27 of 43

การแปลง “ข้อความ” เป็น datetime

  • หากคุณมีข้อมูลวันที่ในรูปแบบ ข้อความ (string) เช่น:
  • '2026/10/21 16:29:00'
  • 'October 21, 2026'
  • และต้องการแปลงเป็น datetime
  • 👉 ให้ใช้ฟังก์ชัน
  • datetime.datetime.strptime()

28 of 43

การเรียกใช้งานโปรแกรมอื่นจาก Python

  • โปรแกรม Python สามารถเปิดโปรแกรมอื่นบนเครื่องได้ โดยใช้ฟังก์ชัน run() ในโมดูล subprocess
  • แนวคิดสำคัญแต่ละโปรแกรมที่เปิดขึ้นมาเรียกว่า process ถ้าเปิดหลายหน้าต่าง → จะมีหลาย process(เช่น Calculator หลายหน้าต่าง = หลาย process)

29 of 43

การเรียกใช้งานโปรแกรมอื่นจาก Python

  • subprocess.Popen() (สำคัญมากใน RPA) ถ้าต้องการ:�👉 เปิดโปรแกรมแล้ว “ไม่ต้องรอ”

📦 Popen Object

ค่าที่ได้จะเป็น object ที่ควบคุม process ได้

30 of 43

การเรียกใช้งานโปรแกรมอื่นจาก Python

  • 🔍 poll()
  • ใช้ตรวจสอบว่าโปรแกรมยังรันอยู่หรือไม่
    • ถ้ายังรัน → None
    • ถ้าจบแล้ว → return exit code
  • wait()
  • รอจนโปรแกรมปิด ใช้เมื่อ:
    • ต้องการให้ user ใช้งานโปรแกรมก่อน
    • แล้วค่อยทำงานต่อ

31 of 43

การเรียกใช้งานโปรแกรมอื่นจาก Python

🛑 ปิดโปรแกรม (kill)

เช่น noteP_proc.kill( )

32 of 43

การเรียกใช้งานโปรแกรมอื่นจาก Python

ฟังก์ชัน

พฤติกรรม

run()

รอจนโปรแกรมปิด

Popen()

เปิดแล้วทำงานต่อ

poll()

เช็คสถานะ

wait()

รอให้จบ

kill()

ปิดโปรแกรม

33 of 43

การส่ง Argument ให้โปรแกรมที่เรียกใช้งาน

  • คุณสามารถส่ง command line arguments ไปยังโปรแกรมที่เรียกด้วย subprocess.run() ได้
  • ให้ส่งเป็น list (รายการ) เข้าไปใน run()
  • subprocess.run([program, arg1, arg2, ...])
  • ค่าแรก → ชื่อโปรแกรม (executable)
  • ค่าที่เหลือ → arguments ที่ส่งให้โปรแกรม
  • 📌 รายการนี้จะเปรียบเสมือนค่า sys.argv ของโปรแกรมนั้น

34 of 43

การส่ง Argument ให้โปรแกรมที่เรียกใช้งาน

35 of 43

การรับผลลัพธ์จากคำสั่งที่รัน

  • Python สามารถ:
    • รันคำสั่ง terminal
    • และรับผลลัพธ์ (output) กลับมาได้

36 of 43

การรับผลลัพธ์จากคำสั่งที่รัน

  • 📦 การเข้าถึงผลลัพธ์
  • proc.stdout
  • 👉 คือ standard output (stdout)

แนวคิด

ความหมาย

run([program, args])

ส่ง argument ให้โปรแกรม

GUI app

มักเปิดไฟล์

capture_output

เก็บผลลัพธ์

stdout

ข้อมูลที่โปรแกรมพิมพ์ออกมา

37 of 43

การรับผลลัพธ์จากคำสั่งที่รัน

38 of 43

การใช้ตัวจัดตารางงานของระบบปฏิบัติการ

  • OS platform จะมีเครื่องมือเหล่านี้:
    • Windows → Task Scheduler
    • macOS → launchd
    • Linux → cron
  • เครื่องมือเหล่านี้:👉 ใช้สำหรับตั้งเวลาให้โปรแกรมทำงานอัตโนมัติเช่น:รันโปรแกรมทุกวันรันตอนเวลาเฉพาะรันเป็นช่วงเวลา (interval)

39 of 43

การใช้ตัวจัดตารางงานของระบบปฏิบัติการ

  • ⚠️ แต่ถ้าเป็นงานง่าย
  • ถ้าคุณต้องการ:�👉 หยุดโปรแกรมแค่ช่วงสั้น ๆ
  • ให้ใช้:
  • while datetime.datetime.now() < target:� time.sleep(1)
  • 👉 จะง่ายกว่าใช้ scheduler

40 of 43

การเปิดไฟล์ด้วยโปรแกรมเริ่มต้นของระบบ

  • 📌 อธิบาย
  • สร้างไฟล์ Hi.txt
  • เขียนข้อความลงไฟล์
  • ใช้ subprocess.run() เปิดไฟล์

41 of 43

Project : Simple Countdown Program

  • โปรแกรมนับถอยหลังแบบง่าย
  • เช่นเดียวกับที่หาแอป stopwatch แบบง่าย ๆ ได้ยาก�👉 การหาแอป countdown แบบเรียบง่ายก็ไม่ง่ายเช่นกัน
  • ดังนั้น เราจะเขียนโปรแกรมนับถอยหลังเอง โดยเมื่อหมดเวลาแล้วจะมีเสียงแจ้งเตือน

42 of 43

Project : Step 1: เขียนโปรแกรมนับถอยหลัง

  • 📌 อธิบาย
  • time_left -> เก็บจำนวนวินาทีที่เหลือ (เริ่มที่ 60 วินาที)
  • while time_left > 0�→ ทำงานจนกว่าจะนับถึง 0
  • ในแต่ละรอบ:
    • แสดงตัวเลข
    • หยุด 1 วินาที
    • ลดค่าลง 1

43 of 43

Project : Step 2: เล่นเสียงเมื่อหมดเวลา

  • วิธีง่ายที่สุด:�👉 ใช้โปรแกรมที่มีอยู่ในเครื่องเปิดไฟล์เสียง