Mục con


2. Sử dụng trình thông dịch Python


2.1 Chạy trình thông dịch

Bộ thông dịch Python thường được cài đặt là /usr/local/bin/python trên các máy tính đã cài đặt sẵn; bổ sung /usr/local/bin vào đường dẫn tìm kiếm của vỏ (shell) Unix sẽ giúp khởi động nó từ mọi nơi bằng một lệnh đơn giản

python

trong vỏ. Vì nơi mà trình thông dịch được cài đặt là một tùy chọn nên khi cài đặt trình thông dịch có thể sẽ được đặt ở một nơi khác; hãy hỏi quản trị hệ thống của bạn. (ví dụ /usr/local/python cũng là một vị trí hay được dùng để cài.)

Trên các máy tính dùng Windows, Python thường được cài đặt vào C:\Python24, dù vậy bạn vẫn có thể thay đổi vị trí cài đặt khi chạy chương trình cài đặt. Để bổ sung thư mục này vào đường dẫn, bạn có thể gõ lệnh sau lên dấu nhắc lệnh trong cửa sổ DOS:

set path=%path%;C:\python24

Gõ một ký tự kết thúc tập tin (end-of-file character) (Control-D trên Unix, Control-Z trên Windows) tại dấu nhắc của bộ thông dịch sẽ thoát khỏi bộ thông dịch và trả về trạng thái kết thúc chương trình là 0 (không) cho hệ điều hành, bạn cũng có thể thoát khỏi bộ thông dịch bằng các lệnh sau: "import sys; sys.exit()".

Tính năng soạn thảo theo dòng của bộ thông dịch thường không phức tạp lắm. Trên Unix, bất cứ ai đã cài đặt bộ thông dịch đều có thể bật chế độ hỗ trợ cho thư viện GNU readline, điều này sẽ bổ sung tính năng soạn thảo tương tác tốt hơn cũng như các tính năng lịch sử lệnh. Có thể kiểm tra việc hỗ trợ tính năng soạn thảo dòng bằng cách nhấn Control-P tại dấu nhắc đầu tiên của Python. Nếu có tiếng bíp, bộ thông dịch của bạn có hỗ trợ soạn thảo dòng; xem phụ lục A để biết về các phím. Nếu không có gì xảy ra, hoặc kí tự P hiện lên, thì tính năng soạn thảo dòng không được hỗ trợ; bạn chỉ việc dùng phím lùi (backspace) để xóa kí tự hiện ra.

Bộ thông dịch Python hoạt động khá giống với vỏ Unix : khi được gọi với một đầu nhập chuẩn đã kết nối với một thiết bị đầu cuối (tty device), nó đọc và thực hiện các lệnh một cách tương tác; khi được gọi với tham số là một tên tập tin hoặc với đầu vào chuẩn là một tập tin, nó đọc và thực hiện kịch bản chứa trong tập đó.

Một cách nữa để khởi động bộ thông dịch là lệnh "python -c command [arg] ...", sẽ thực thi một hoặc nhiều câu lệnh trong command, giống như tùy chọn -c của vỏ. Vì các câu lệnh của Python thường chứa các khoảng trống hoặc các kí tự đặc biệt, chọn lựa an toàn nhất là bao command bằng dấu nháy kép (").

Một số mô-đun cũng có thể được dùng như kịch bản. Chúng có thể được gọi bằng cách sử dụng cú pháp "python -m module [arg] ...", lệnh này sẽ thực hiện tập tin nguồn module như khi bạn chỉ ra tên tập tin và đường dẫn đầy đủ trên dòng lệnh.

Xin lưu ý rằng có sự khác biệt giữa "python file" và "python <file". Trong trường hợp sau, các yêu cầu vào (input request) từ chương trình, ví dụ như lời gọi tới input()raw_input(), được cung cấp từ file. Vì tập tin này đã được đọc đến cuối bởi trình phân tích (parser) trước khi chương trình thực thi, chương trình sẽ gặp phải cuối tập tin (end-of-file) ngay lập tức. Trong trường hợp đầu (là cách bạn sẽ hay dùng) các yêu cầu vào được cung cấp từ bất kỳ tập tin hoặc thiết bị nào được kết nối vào đầu vào chuẩn của trình thông dịch Python.

Khi tập tin kịch bản (script file) được sử dụng, đôi khi sẽ rất hữu dụng nếu có thể chạy chương trình và chuyển sang chế độ tương tác ngay sau đó. Điều này thực hiện được bằng cách truyền -i trước script (python -i script). (Phương pháp này không hoạt động nếu chương trình được đọc từ đầu vào chuẩn, lí do của chuyện này đã được giải thích trong đoạn trước.)


2.1.1 Truyền thông số

Bộ thông dịch nhận biết tên chương trình và các tham số khác được truyền vào chương trình trong biến sys.argv, dưới dạng một danh sách các chuỗi. Độ dài tối thiểu là một; khi không có kịch bản hoặc thông số truyền vào, sys.argv[0] là một chuỗi rỗng. Khi tên kịch bản được truyền vào là '-' (có nghĩa là đầu vào chuẩn), sys.argv[0] được gán thành '-'. Khi -c command được sử dụng, sys.argv[0] được gán thành '-c'. Khi -m module được sử dụng, sys.argv[0] được gán là tên đầy đủ của mô-đun đã nạp. Các tùy chọn sau -c command hoặc -m module không được sử dụng bởi trình thông dịch Python mà truyền vào sys.argv để cho command hay module xử lý.


2.1.2 Chế độ tương tác

Khi các lệnh được đọc từ một tty, trình thông dịch được xem là đang trong chế độ tương tác. Trong chế độ này nó nhắc lệnh tiếp theo với dấu nhắc chính (primary prompt), thường là ba dấu lớn hơn (">>> "); với các dòng tiếp nối (continuation line), nó sẽ nhắc với dấu nhắc thứ (secondary prompt), mặc định là ba dấu chấm ("... "). Bộ thông dịch sẽ in một thông báo chào mừng, số hiệu phiên bản và thông báo bản quyền trước khi hiện dấu nhắc:

python
Python 1.5.2b2 (#1, Feb 28 1999, 00:02:06)  [GCC 2.8.1] on sunos5
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>>

Các dòng nối tiếp được dùng khi nhập vào các cấu trúc nhiều dòng. Hãy xem ví dụ dưới, chú ý câu lệnh if :

>>> 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 Trình thông dịch và môi trường của nó


2.2.1 Xử lý lỗi

Khi xảy ra một lỗi, bộ dịch in ra thông báo lỗi và lần ngược ngăn xếp (stack trace). Trong chế độ tương tác, nó sẽ trả lại dấu nhắc chính; khi đầu vào là một tập tin, nó sẽ thoát với mã lỗi khác 0 sau khi in ra lần ngược ngăn xếp. (Các biệt lệ được xử lý bởi vế except trong một câu lệnh try không phải là các lỗi chúng ta nói đến ở đây.) Một số lỗi là nghiêm trọng không điều kiện và gây ra lỗi thoát với giá trị lỗi khác 0; điều này áp dụng cho các trường hợp mâu thuẫn nội tại và một vài trường hợp tràn bộ nhớ. Tất cả các thông báo lỗi đều được xuất ra dòng xuất lỗi chuẩn (standard error stream); kết xuất bình thường sẽ được xuất ra dòng xuất chuẩn (standard output - xin được hiểu là màn hình, tập tin...).

Gõ kí tự ngắt (thường là Control-C hoặc DEL) vào dấu nhắc chính hoặc dấu nhắc thứ sẽ bỏ những gì đã nhập vào và trở về dấu nhắc chính.2.1Gõ kí tự ngắt trong khi một lệnh đang được thực thi sẽ gây ra biệt lệ KeyboardInterrupt , trường hợp này có thể được xử lý bằng câu lệnh try .


2.2.2 Các kịch bản Python khả thi

Trên các hệ thống Unix họ BSD, các kịch bản Python có thể được thực thi trực tiếp, như các kịch bản vỏ (shell script), bằng cách thêm dòng

#! /usr/bin/env python

(giả sử rằng bộ thông dịch đã có trong PATH của người dùng) ở đầu kịch bản và đặc thuộc tính thực thi (executable mode) cho tập tin đó. Ký hiệu "#!" phải là hai ký tự đầu tiên của tập tin. Trên các nền khác, dòng đầu tiên này phải kết thúc bằng một ký tự xuống dòng kiểu Unix ("\n"), không phải Mac OS ("\r") hay Windows ("\r\n"). Lưu ý rằng dấu thăng "#", được dùng để bắt đầu một chú thích trong Python.

Kịch bản có thể được đặt quyền thực thi bằng cách dùng lệnh chmod :

$ chmod +x myscript.py

2.2.3 Bảng mã mã nguồn

Có thể sử dụng các bảng mã khác bảng ASCII trong các tập tin nguồn Python. Cách tốt nhất là thêm các dòng chú thích đặc biệt vào ngay sau dòng #! để định nghĩa bảng mã trong tập tin:


 # -*- coding: encoding -*- 
 

Với khai báo này, mọi ký tự trong tập tin nguồn sẽ được xem như từ bảng mã encoding, và vì vậy ta có thể viết các chuỗi Unicode trực tiếp trong bảng mã đó. Danh sách các bảng mã có thể được tìm thấy ở Tham khảo thư viện Python, trong phần codecs.

Ví dụ, để viết ký tự biểu diễn đồng Euro, ta có thể sử dụng bảng mã ISO-8859-15, kí hiệu Euro có số thứ tự 164 trong bảng mã. Đoạn chương trình sau sẽ in ra giá trị 8364 (mã Unicode tương ứng với kí tự biểu diễn Euro) và thoát:


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

Nếu bộ soạn thảo của bạn hỗ trợ lưu tập tin theo UTF-8 với đánh dấu thứ tự byte UTF-8 (UTF-8 byte order mark - BOM), bạn có thể dùng nó thay thế cho một khai báo bảng mã. IDLE hỗ trợ sự tương thích này nếu Options/General/Default Source Encoding/UTF-8 được thiết lập. Chú ý rằng ký hiệu này không được các phiên bản Python 2.2 trở về trước nhận biết, và cũng không được hệ điều hành nhận biết là các tập tin kịch bản với các dòng #! (chỉ được dùng trên các hệ Unix ).

Với việc sử dụng UTF-8 (thông qua kí hiệu cũng như khai báo bảng mã), các kí tự trong hầu hết các ngôn ngữ trên thế giới có thể được sử dụng đồng thời trong các chuỗi nguyên bản và các chú thích. Sử dụng các kí tự phi chuẩn ASCII trong các định danh thì không được hỗ trợ. Để hiển thị đúng các kí tự, bộ soạn thảo của bạn nhất thiết phải nhận biết tập tin UTF-8 và buộc phải sử dụng các phông chữ hỗ trợ tốt các kí tự này.


2.2.4 Tập tin khởi tạo tương tác

Khi bạn sử dụng Python ở chế độ tương tác, sẽ rất tiện lợi khi có một số lệnh chuẩn luôn được thực hiện mỗi khi bộ thông dịch khởi động. Bạn có thể thực hiện việc này bằng cách thiết lập một biến môi trường có tên PYTHONSTARTUP với giá trị là tên của tập tin bạn chứa các câu lệnh khởi tạo. Cách này tương tự như chức năng .profile của vỏ Unix .

Tập tin này chỉ được đọc trong phiên làm việc tương tác, không có tác dụng với các kịch bản, và khi /dev/tty được chỉ định rõ là nguồn lệnh (nếu không thì trường hợp này cũng giống như một phiên làm việc tương tác). Nó được thực thi trong cùng vùng tên (namespace) mà các lệnh tương tác được thực thi, cho nên các đối tượng nó định nghĩa, hoặc nhập vào (import) có thể được dùng mà không cần xác nhận trong phiên làm việc tương tác. Bạn cũng có thể thay đổi dấu nhắc sys.ps1sys.ps2 trong tập tin này.

Nếu bạn muốn đọc các tập khởi động bổ sung từ thư mục hiện tại, bạn có thể lập trình điều này trong tập tin khởi động với mã như "if os.path.isfile('.pythonrc.py'): execfile('.pythonrc.py')". Nếu bạn muốn dùng tập tin khởi động trong một kịch bản, bạn phải chỉ rõ điều này trong kịch bản:

import os
filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
    execfile(filename)



Ghi chú

... dấu nhắc chính.2.1
Gói GNU Readline có một lỗi có thể ngăn cản điều này.
Xem Về tài liệu này... về cách đề nghị thay đổi.