2. ใช้งานไพธอนแบบบรรทัดคำสั่ง (Using the Python Interpreter)

2.1 เรียกใช้ตัวแปลบรรทัดคำสั่ง (Invoking the Interpreter)
2.2 ตัวแปลคำสั่งและสภาพแวดล้อม (The Interpreter and Its Environment)


2.1 เรียกใช้ตัวแปลบรรทัดคำสั่ง (Invoking the Interpreter)

ในเดเบียนตัวโปรแกรมไพธอนจะอยู่ที่ /usr/bin/python ซึ่งจะเป็นลิงก์โยงไปหาตัวไพธอนรุ่นที่เราติดตั้งจริง ๆ เช่น

$ which python
/usr/bin/python
$ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 9 2006-12-26 19:18 /usr/bin/python -> python2.4

จะเห็นว่ารุ่นของไพธอนตามตัวอย่าง เป็นรุ่น 2.4

ซึ่งไดเรกทอรี /usr/bin จะอยู่ในพาธการค้นหาโปรแกรมอยู่แล้ว ดังนั้นเราสามารถเรียกใช้ได้ง่าย ๆ ว่า

$ python

สำหรับลินุกซ์ดิสโทรอื่นก็คล้าย ๆ กัน

ในวินโดวส์ เมื่อติดตั้งไพธอนเสร็จแล้ว ตัวโปรแกรมจะไปอยู่ที่ C:\Python24 ซึ่งเราอาจต้องเพิ่มในพาธเอง ด้วยการเข้าสู่ Command Prompt และพิมพ์ดังนี้

set path=%path%;C:\python24

ทั้งหมดนี้เป็นการเรียกใช้ตัวแปลบรรทัดคำสั่งของไพธอน ซึ่งจะทำให้เราสามารถใช้งานแบบโต้ตอบกับตัวแปลภาษาได้

แต่ยังมีอีกกรณีหนึ่งคือ หากเราต้องการเพียงแค่ทดลองเพียงคำสั่งเดียวแล้วออกจากไพธอนเลย เราอาจใช้รูปแบบเป็น python -c command [arg] เช่น

$ python -c 'print "abcd"'
abcd
2.1.1 การส่งผ่านค่า (Argument Passing)

เมื่อเรียกใช้ตัวแปลบรรทัดคำสั่ง ค่าตามหลังที่เราส่งผ่านให้กับโปรแกรม จะถูกเก็บไว้ที่ตัวแปร sys.argv โดย...

  • ถ้าหากเรียกโดยไม่มีค่าตามหลัง เช่น python : sys.argv[0] จะเป็นสตริงว่าง
  • หากเรียกด้วย python - : sys.argv[0] จะบรรจุค่า "-"
  • หากเรียกด้วยตัวเลือก -c หรือ -m : sys.argv[0] จะเก็บค่า "-c" และชื่อมอดูลตามลำดับ ค่าอื่นหลังจากนี้ จะถูกเก็บไว้ในตัวแปร sys.argv เพื่อให้คำสั่งหรือมอดูลได้เรียกใช้งานต่อไป
2.1.2 ใช้งานแบบโต้ตอบ (Interactive Mode)

พร็อมต์หลัก (Primary prompt) คือ >>>

$ python
Python 2.4.4 (#2, Apr  5 2007, 20:11:18) 
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

แต่หากยังไม่จบบล็อค จะใช้พร็อมต์ตาม (Secondary promt) คือ ... ดังนี้

>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
... 
Be careful not to fall off!


2.2 ตัวแปลคำสั่งและสภาพแวดล้อม (The Interpreter and Its Environment)

2.2.1 การจัดการข้อผิดพลาด (Error Handling)

เมื่อเกิดข้อผิดพลาด ไพธอนจะรายงานข้อผิดพลาดและรายทางของการผิดพลาด โดย

  • ถ้าอยู่ในโหมดโต้ตอบ ไพธอนจะกลับสู่พร็อมต์หลัก
  • ถ้าอยู่ในโหมดทำงานจากไฟล์ ไพธอนจะออกมาด้วยตัวเลขรายงานสถานะที่ไม่ใช่ศูนย์ (ถ้าเป็นศูนย์คือไม่เกิดข้อผิดพลาด)

รายงานความผิดพลาดทั้งหมดจะถูกส่งไปยังสายการรายงานข้อผิดพลาดของระบบ (standard error stream) และการแสดงผลก็จะถูกส่งไปยังเอาต์พุตของระบบเช่นกัน

การกดคีย์เพื่อขัดจังหวะ เช่น Control-C หรือ DEL จะ...

  • ถ้าอยู่ที่เครื่องหมายพร็อมต์ จะยกเลิกการป้อนข้อมูลทั้งหมด และกลับสู่พร็อมต์หลัก
  • ถ้าเป็นขณะรัน จะป่าวสิ่งผิดปรกติ KeyboardInterrupt ขึ้นมา ซึ่งเราสามารถจัดการได้ด้วยประโยคคำสั่ง try
2.2.2 การทำให้สคริปต์รันได้ (Executable Python Scripts)

แค่เติม Hash bang ที่บรรทัดแรกของสคริปต์ ก็จะทำให้สคริปต์สามารถรันได้

#! /usr/bin/env python

อย่าลืมเปลี่ยนโหมดให้รันได้ด้วย

$ chmod +x myscript.py
2.2.3 การแจ้งรหัสอักขระของซอร์สโค้ด (Source Code Encoding)

หากมีส่วนของซอร์สโค้ดที่ไม่ใช่ภาษาอังกฤษล้วน ควรแจ้งรหัสอักขระที่ใช้ด้วย ด้วยการเติมต่อจากบรรทัดแรกว่า

# -*- coding: encoding -*- 

สามารถดูรหัสอักขระทั้งหมดที่ Python Library Reference ในหัวข้อ codecs

เช่น ถ้าจะใช้สตริงที่มีสัญลักษณ์หน่วยเงินยูโร เราอาจเลือกใช้รหัสอักขระ ISO-8859-15 (ค่า ordinal คือ 164) ซึ่งในสคริปต์นี้จะพิมพ์ค่า 8364 ซึ่งเป็นค่ายูนิโค้ดของสัญลักษณ์ยูโร

# -*- coding: iso-8859-15 -*-
 
currency = u"€"
print ord(currency)

แต่สำหรับยุคนี้ ควรเลือกใช้ UTF-8 ดีกว่าเยอะ เพราะรองรับอักขระทุกตัวในโลก

2.2.4 การสร้างไฟล์เริ่มต้นสำหรับโหมดโต้ตอบ (The Interactive Startup File)

ในการใช้งานโหมดโต้ตอบ บางครั้งอาจต้องตั้งค่าเริ่มต้นให้ระบบ ซึ่งทำได้โดยใส่ชื่อโปรแกรมที่ต้องการรันในขณะเริ่มต้นในตัวแปรแวดล้อมชื่อ PYTHONSTARTUP (คล้ายกับการตั้งค่าไฟล์ .profile ในลินุกซ์)

เราสามารถขยายความสามารถนี้ โดยให้ไฟล์เริ่มต้นหลักมาดูในไดเรกทอรีปัจจุบันก่อน ว่ามีไฟล์ที่มีชื่อตามที่เรากำหนดหรือไม่ ถ้ามีก็จะรันตามที่เรากำหนดไว้ เช่นถ้ากำหนดให้ใช้ชื่อว่า .pythonrc.py ก็ใช้คำสั่งว่า "if os.path.isfile('.pythonrc.py'): execfile('.pythonrc.py')" เป็นต้น

โปรแกรมเริ่มต้นนี้จะถูกเรียกในโหมดโต้ตอบเท่านั้น จะไม่ถูกเรียกในการรันสคริปต์ แต่ถ้าต้องการให้สคริปต์เรียกโปรแกรมเริ่มต้นนี้ด้วย จะต้องสั่งในสคริปต์เอง เช่น

import os
filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
    execfile(filename)
Taxonomy upgrade extras: 
Creative Commons License ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น
ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้