IDLE --- Trình soạn thảo và shell Python¶
Source code: Lib/idlelib/
IDLE là Môi trường học tập và phát triển tích hợp của Python.
IDLE có các tính năng sau:
đa nền tảng: hoạt động gần như giống nhau trên Windows, Unix và macOS
Cửa sổ shell Python (trình thông dịch tương tác) với màu sắc của thông báo đầu vào, đầu ra và lỗi mã
trình soạn thảo văn bản nhiều cửa sổ với nhiều thao tác hoàn tác, tô màu Python, thụt lề thông minh, mẹo gọi, tự động hoàn thành và các tính năng khác
tìm kiếm trong bất kỳ cửa sổ nào, thay thế trong cửa sổ soạn thảo và tìm kiếm trong nhiều tệp (grep)
trình gỡ lỗi với các điểm dừng liên tục, bước và xem các không gian tên chung và cục bộ
cấu hình, trình duyệt và các hộp thoại khác
Ứng dụng IDLE được triển khai trong gói idlelib.
Đây là một optional module. Nếu nó bị thiếu trong bản sao CPython của bạn, hãy tìm tài liệu từ nhà phân phối của bạn (nghĩa là bất kỳ ai đã cung cấp Python cho bạn). Nếu bạn là nhà phân phối, hãy xem Yêu cầu đối với các mô-đun tùy chọn.
Khởi động và thực thi mã¶
Khi khởi động với tùy chọn -s, IDLE sẽ thực thi tệp được tham chiếu bởi các biến môi trường IDLESTARTUP hoặc PYTHONSTARTUP. IDLE lần đầu tiên kiểm tra IDLESTARTUP; nếu có IDLESTARTUP thì tệp được tham chiếu sẽ chạy. Nếu IDLESTARTUP không có, IDLE sẽ kiểm tra PYTHONSTARTUP. Các tệp được tham chiếu bởi các biến môi trường này là nơi thuận tiện để lưu trữ các hàm được sử dụng thường xuyên từ shell IDLE hoặc để thực thi các câu lệnh nhập để nhập các mô-đun phổ biến.
Ngoài ra, Tk cũng tải tệp khởi động nếu có. Lưu ý rằng tệp Tk được tải vô điều kiện. Tệp bổ sung này là .Idle.py và được tìm kiếm trong thư mục chính của người dùng. Các câu lệnh trong tệp này sẽ được thực thi trong không gian tên Tk, vì vậy tệp này không hữu ích cho việc nhập các hàm được sử dụng từ trình bao Python của IDLE.
Sử dụng dòng lệnh¶
IDLE có thể được gọi từ dòng lệnh với nhiều tùy chọn khác nhau. Cú pháp chung là:
python -m idlib [tùy chọn] [tệp ...]
Các tùy chọn sau đây có sẵn:
- -c <command>¶
Chạy lệnh Python đã chỉ định trong cửa sổ shell. Ví dụ: vượt qua
-c "print('Hello, World!')". Trên Windows, dấu ngoặc kép bên ngoài phải là dấu ngoặc kép như hình.
- -d¶
Kích hoạt trình gỡ lỗi và mở cửa sổ shell.
- -e¶
Mở một cửa sổ soạn thảo.
- -h¶
In thông báo trợ giúp với sự kết hợp hợp pháp của các tùy chọn và thoát.
- -i¶
Mở một cửa sổ shell.
- -r <file>¶
Chạy tệp được chỉ định trong cửa sổ shell.
- -s¶
Chạy tệp khởi động (như được xác định bởi các biến môi trường
IDLESTARTUPhoặcPYTHONSTARTUP) trước khi mở cửa sổ shell.
- -t <title>¶
Đặt tiêu đề của cửa sổ shell.
- -¶
Đọc và thực thi đầu vào tiêu chuẩn trong cửa sổ shell. Tùy chọn này phải là tùy chọn cuối cùng trước bất kỳ đối số nào.
Nếu đối số được cung cấp:
Nếu
-,-choặc-rđược sử dụng, tất cả các đối số sẽ được đặt trongsys.argv[1:]vàsys.argv[0]được đặt thành'','-c'hoặc'-r'tương ứng. Không có cửa sổ soạn thảo nào được mở, ngay cả khi đó là cài đặt mặc định trong hộp thoại Options.Mặt khác, các đối số được coi là tệp được mở để chỉnh sửa và
sys.argvphản ánh các đối số được truyền cho chính IDLE.
Lỗi khởi động¶
IDLE sử dụng một ổ cắm để giao tiếp giữa quy trình IDLE GUI và quy trình thực thi mã người dùng. Kết nối phải được thiết lập bất cứ khi nào Shell khởi động hoặc khởi động lại. (Cái sau được biểu thị bằng một đường phân chia có nội dung 'RESTART'). Nếu quy trình người dùng không kết nối được với quy trình GUI, nó thường hiển thị hộp lỗi Tk với thông báo 'không thể kết nối' hướng người dùng đến đây. Sau đó nó thoát ra.
Một lỗi kết nối cụ thể trên hệ thống Unix là do các quy tắc giả mạo được định cấu hình sai ở đâu đó trong thiết lập mạng của hệ thống. Khi IDLE được khởi động từ một thiết bị đầu cuối, người ta sẽ thấy thông báo bắt đầu bằng ** Invalid host:. Giá trị hợp lệ là 127.0.0.1 (idlelib.rpc.LOCALHOST). Người ta có thể chẩn đoán bằng tcpconnect -irv 127.0.0.1 6543 trong một cửa sổ đầu cuối và tcplisten <same args> trong một cửa sổ khác.
Nguyên nhân lỗi phổ biến là do tệp do người dùng viết có cùng tên với mô-đun thư viện tiêu chuẩn, chẳng hạn như random.py và tkinter.py. Khi một tệp như vậy nằm trong cùng thư mục với tệp sắp chạy, IDLE không thể nhập tệp stdlib. Cách khắc phục hiện tại là đổi tên tệp người dùng.
Mặc dù ít phổ biến hơn trước đây nhưng chương trình chống vi-rút hoặc tường lửa có thể dừng kết nối. Nếu chương trình không thể được dạy để cho phép kết nối thì phải tắt nó để IDLE hoạt động. Việc cho phép kết nối nội bộ này là an toàn vì không có dữ liệu nào hiển thị trên các cổng bên ngoài. Một vấn đề tương tự là cấu hình mạng sai khiến chặn kết nối.
Các sự cố cài đặt Python đôi khi khiến IDLE dừng lại: nhiều phiên bản có thể xung đột hoặc một bản cài đặt có thể cần quyền truy cập của quản trị viên. Nếu một người hoàn tác xung đột hoặc không thể hoặc không muốn chạy với tư cách quản trị viên, thì cách dễ nhất là xóa hoàn toàn Python và bắt đầu lại.
Quá trình zombie pythonw.exe có thể là một vấn đề. Trên Windows, hãy sử dụng Trình quản lý tác vụ để kiểm tra và dừng nó nếu có. Đôi khi, quá trình khởi động lại do chương trình gặp sự cố hoặc ngắt bàn phím (control-C) có thể không kết nối được. Việc loại bỏ hộp lỗi hoặc sử dụng Khởi động lại Shell trên menu Shell có thể khắc phục sự cố tạm thời.
Khi IDLE khởi động lần đầu tiên, nó sẽ cố đọc các tệp cấu hình người dùng trong ~/.idlerc/ (~ là thư mục chính của một người). Nếu có vấn đề, một thông báo lỗi sẽ được hiển thị. Bỏ qua những trục trặc ngẫu nhiên của đĩa, điều này có thể được ngăn chặn bằng cách không bao giờ chỉnh sửa tệp bằng tay. Thay vào đó, hãy sử dụng hộp thoại cấu hình trong Tùy chọn. Khi xảy ra lỗi trong tệp cấu hình người dùng, giải pháp tốt nhất có thể là xóa nó và bắt đầu lại với hộp thoại cài đặt.
Nếu IDLE thoát mà không có thông báo và nó không được khởi động từ bảng điều khiển, hãy thử khởi động nó từ bảng điều khiển hoặc thiết bị đầu cuối (python -m idlelib) và xem liệu điều này có dẫn đến thông báo lỗi hay không.
Trên các hệ thống dựa trên Unix có tcl/tk cũ hơn 8.6.11 (xem About IDLE), một số ký tự nhất định của một số phông chữ nhất định có thể gây ra lỗi tk kèm theo một thông báo tới thiết bị đầu cuối. Điều này có thể xảy ra nếu người ta khởi động IDLE để chỉnh sửa tệp có ký tự như vậy hoặc sau đó khi nhập ký tự đó. Nếu không thể nâng cấp tcl/tk, hãy định cấu hình lại IDLE để sử dụng phông chữ hoạt động tốt hơn.
Chạy mã người dùng¶
Với một số trường hợp ngoại lệ hiếm hoi, kết quả của việc thực thi mã Python bằng IDLE sẽ giống như thực thi cùng một mã theo phương thức mặc định, trực tiếp với Python trong bảng điều khiển hệ thống ở chế độ văn bản hoặc cửa sổ đầu cuối. Tuy nhiên, giao diện và hoạt động khác nhau đôi khi ảnh hưởng đến kết quả hiển thị. Ví dụ: sys.modules bắt đầu với nhiều mục nhập hơn và threading.active_count() trả về 2 thay vì 1.
Theo mặc định, IDLE chạy mã người dùng trong một quy trình hệ điều hành riêng biệt thay vì trong quy trình giao diện người dùng chạy shell và trình soạn thảo. Trong quá trình thực thi, nó thay thế sys.stdin, sys.stdout và sys.stderr bằng các đối tượng nhận đầu vào và gửi đầu ra tới cửa sổ Shell. Các giá trị ban đầu được lưu trữ trong sys.__stdin__, sys.__stdout__ và sys.__stderr__ không được chạm vào nhưng có thể là None.
Gửi kết quả in từ một quy trình đến một tiện ích văn bản trong một quy trình khác chậm hơn so với việc in tới thiết bị đầu cuối hệ thống trong cùng một quy trình. Điều này có tác dụng cao nhất khi in nhiều đối số, vì chuỗi cho mỗi đối số, mỗi dấu phân cách, dòng mới được gửi riêng. Để phát triển, đây thường không phải là vấn đề, nhưng nếu muốn in nhanh hơn trong IDLE, hãy định dạng và kết hợp mọi thứ người ta muốn hiển thị cùng nhau rồi in một chuỗi. Cả chuỗi định dạng và str.join() đều có thể giúp kết hợp các trường và dòng.
Các thay thế luồng tiêu chuẩn của IDLE không được kế thừa bởi các quy trình con được tạo trong quá trình thực thi, cho dù trực tiếp bằng mã người dùng hay bởi các mô-đun như đa xử lý. Nếu quy trình con đó sử dụng input từ sys.stdin hoặc print hoặc write đến sys.stdout hoặc sys.stderr, thì IDLE sẽ được khởi động trong cửa sổ dòng lệnh. (Trên Windows, hãy sử dụng python hoặc py thay vì pythonw hoặc pyw.) Sau đó, quy trình con phụ sẽ được gắn vào cửa sổ đó để nhập và xuất.
Nếu sys được đặt lại bằng mã người dùng, chẳng hạn như với importlib.reload(sys), các thay đổi của IDLE sẽ bị mất và dữ liệu nhập từ bàn phím cũng như đầu ra ra màn hình sẽ không hoạt động chính xác.
Khi Shell có tiêu điểm, nó sẽ điều khiển bàn phím và màn hình. Điều này thường trong suốt nhưng các chức năng truy cập trực tiếp vào bàn phím và màn hình sẽ không hoạt động. Chúng bao gồm các chức năng dành riêng cho hệ thống để xác định xem một phím đã được nhấn chưa và nếu có thì nhấn phím nào.
Mã IDLE chạy trong quá trình thực thi sẽ thêm các khung vào ngăn xếp cuộc gọi mà lẽ ra không có ở đó. IDLE bao bọc sys.getrecursionlimit và sys.setrecursionlimit để giảm tác dụng của các khung ngăn xếp bổ sung.
Khi mã người dùng tăng SystemExit trực tiếp hoặc bằng cách gọi sys.exit, IDLE sẽ quay lại dấu nhắc Shell thay vì thoát.
Đầu ra của người dùng trong Shell¶
Khi một chương trình xuất ra văn bản, kết quả sẽ được xác định bởi thiết bị đầu ra tương ứng. Khi IDLE thực thi mã người dùng, sys.stdout và sys.stderr được kết nối với vùng hiển thị của Shell của IDLE. Một số tính năng của nó được kế thừa từ tiện ích Văn bản Tk cơ bản. Những người khác được lập trình bổ sung. Ở những nơi quan trọng, Shell được thiết kế để phát triển hơn là chạy sản xuất.
Ví dụ, Shell không bao giờ vứt bỏ sản phẩm đầu ra. Một chương trình gửi đầu ra không giới hạn tới Shell cuối cùng sẽ lấp đầy bộ nhớ, dẫn đến lỗi bộ nhớ. Ngược lại, một số cửa sổ văn bản hệ thống chỉ giữ lại n dòng đầu ra cuối cùng. Ví dụ: bảng điều khiển Windows giữ từ 1 đến 9999 dòng do người dùng cài đặt, với 300 dòng mặc định.
Tiện ích Văn bản Tk, và do đó là Shell của IDLE, hiển thị các ký tự (điểm mã) trong tập hợp con BMP (Mặt phẳng đa ngôn ngữ cơ bản) của Unicode. Ký tự nào được hiển thị bằng hình tượng thích hợp và ký tự nào có hộp thay thế tùy thuộc vào hệ điều hành và phông chữ được cài đặt. Ký tự tab khiến văn bản sau bắt đầu sau khi dừng tab tiếp theo. (Chúng xuất hiện cứ sau 8 'ký tự'). Ký tự dòng mới khiến văn bản sau xuất hiện trên một dòng mới. Các ký tự điều khiển khác bị bỏ qua hoặc hiển thị dưới dạng khoảng trắng, hộp hoặc thứ gì khác, tùy thuộc vào hệ điều hành và phông chữ. (Di chuyển con trỏ văn bản qua đầu ra như vậy bằng các phím mũi tên có thể biểu hiện một số hành vi giãn cách đáng ngạc nhiên.)
>>> s = 'a\tb\a<\x02><\r>\bc\nd' # Enter 22 ký tự.
>>> len(s)
14
>>> s # Display đại diện
'a\tb\x07<\x02><\r>\x08c\nd'
>>> print(s, end='') # Display s nguyên trạng.
# Result thay đổi tùy theo hệ điều hành và phông chữ. Hãy thử nó.
Hàm repr được sử dụng để tạo tiếng vang tương tác của các giá trị biểu thức. Nó trả về một phiên bản đã thay đổi của chuỗi đầu vào trong đó mã điều khiển, một số điểm mã BMP và tất cả các điểm mã không phải BMP được thay thế bằng mã thoát. Như đã trình bày ở trên, nó cho phép người ta xác định các ký tự trong một chuỗi, bất kể chúng được hiển thị như thế nào.
Đầu ra bình thường và đầu ra lỗi thường được giữ tách biệt (trên các dòng riêng biệt) với đầu vào mã và đầu ra khác. Mỗi người đều có màu sắc nổi bật khác nhau.
Đối với các lần theo dõi SyntaxError, dấu '^' thông thường nơi phát hiện lỗi được thay thế bằng cách tô màu văn bản bằng phần đánh dấu lỗi. Khi mã chạy từ một tệp gây ra các ngoại lệ khác, người ta có thể nhấp chuột phải vào dòng truy nguyên để chuyển đến dòng tương ứng trong trình chỉnh sửa IDLE. Tập tin sẽ được mở nếu cần thiết.
Shell có một phương tiện đặc biệt để nén các dòng đầu ra thành nhãn 'Văn bản đã nén'. Việc này được thực hiện tự động đối với đầu ra trên N dòng (N = 50 theo mặc định). N có thể được thay đổi trong phần PyShell của trang Chung của hộp thoại Cài đặt. Đầu ra có ít dòng hơn có thể được nén bằng cách nhấp chuột phải vào đầu ra. Đây có thể là những dòng hữu ích đủ dài để làm chậm quá trình cuộn.
Đầu ra bị nén được mở rộng tại chỗ bằng cách nhấp đúp vào nhãn. Nó cũng có thể được gửi vào clipboard hoặc một cửa sổ xem riêng bằng cách nhấp chuột phải vào nhãn.
Phát triển ứng dụng tkinter¶
IDLE có chủ ý khác với Python tiêu chuẩn để tạo điều kiện phát triển các chương trình tkinter. Nhập import tkinter as tk; root = tk.Tk() bằng Python tiêu chuẩn và không có gì xuất hiện. Nhập tương tự vào IDLE và cửa sổ tk xuất hiện. Trong Python tiêu chuẩn, người ta cũng phải nhập root.update() để xem cửa sổ. IDLE thực hiện tương đương ở chế độ nền, khoảng 20 lần một giây, tức là khoảng 50 mili giây một lần. Tiếp theo nhập b = tk.Button(root, text='button'); b.pack(). Một lần nữa, không có gì thay đổi rõ ràng trong Python tiêu chuẩn cho đến khi người ta nhập root.update().
Hầu hết các chương trình tkinter chạy root.mainloop(), thường không quay trở lại cho đến khi ứng dụng tk bị hủy. Nếu chương trình được chạy với python -i hoặc từ trình soạn thảo IDLE, dấu nhắc shell >>> sẽ không xuất hiện cho đến khi mainloop() quay trở lại, lúc đó không còn gì để tương tác.
Khi chạy chương trình tkinter từ trình soạn thảo IDLE, người ta có thể nhận xét lệnh gọi vòng lặp chính. Sau đó, người ta nhận được lời nhắc shell ngay lập tức và có thể tương tác với ứng dụng trực tiếp. Người ta chỉ cần nhớ kích hoạt lại lệnh gọi vòng lặp chính khi chạy trong Python tiêu chuẩn.
Chạy mà không có quy trình con¶
Theo mặc định, IDLE thực thi mã người dùng trong một quy trình con riêng biệt thông qua một ổ cắm sử dụng giao diện vòng lặp nội bộ. Kết nối này không hiển thị bên ngoài và không có dữ liệu nào được gửi hoặc nhận từ internet. Nếu phần mềm tường lửa vẫn phàn nàn, bạn có thể bỏ qua nó.
Nếu nỗ lực kết nối ổ cắm không thành công, Idle sẽ thông báo cho bạn. Những lỗi như vậy đôi khi chỉ xảy ra nhất thời, nhưng nếu dai dẳng thì sự cố có thể là do tường lửa chặn kết nối hoặc cấu hình sai của một hệ thống cụ thể. Cho đến khi sự cố được khắc phục, người ta có thể chạy Không tải bằng khóa chuyển dòng lệnh -n.
Nếu IDLE được khởi động bằng khóa chuyển dòng lệnh -n, nó sẽ chạy trong một tiến trình duy nhất và sẽ không tạo ra tiến trình con chạy máy chủ thực thi Python RPC. Điều này có thể hữu ích nếu Python không thể tạo quy trình con hoặc giao diện ổ cắm RPC trên nền tảng của bạn. Tuy nhiên, ở chế độ này, mã người dùng không bị tách biệt khỏi IDLE. Ngoài ra, môi trường không được khởi động lại khi chọn Mô-đun Chạy/Chạy (F5). Nếu mã của bạn đã được sửa đổi, bạn phải tải lại() các mô-đun bị ảnh hưởng và nhập lại bất kỳ mục cụ thể nào (ví dụ: from foo import baz) nếu các thay đổi có hiệu lực. Vì những lý do này, tốt nhất nên chạy IDLE với quy trình con mặc định nếu có thể.
Sắp loại bỏ từ phiên bản 3.4.
Trợ giúp và Tùy chọn¶
Nguồn trợ giúp¶
Mục menu trợ giúp "IDLE Help" hiển thị phiên bản html được định dạng của chương IDLE trong Tham khảo Thư viện. Kết quả trong cửa sổ văn bản tkinter chỉ đọc, gần giống với những gì người ta nhìn thấy trong trình duyệt web. Điều hướng qua văn bản bằng con lăn chuột, thanh cuộn hoặc nhấn giữ phím mũi tên lên và xuống. Hoặc nhấp vào nút TOC (Mục lục) và chọn tiêu đề phần trong hộp đã mở.
Mục menu trợ giúp "Tài liệu Python" mở ra các nguồn trợ giúp phong phú, bao gồm các hướng dẫn, có sẵn tại docs.python.org/x.y, trong đó 'x.y' là phiên bản Python hiện đang chạy. Nếu hệ thống của bạn có bản sao tài liệu ngoại tuyến (đây có thể là một tùy chọn cài đặt), thay vào đó, bản sao đó sẽ được mở.
Các URL đã chọn có thể được thêm hoặc xóa khỏi menu trợ giúp bất kỳ lúc nào bằng cách sử dụng tab Chung của hộp thoại Định cấu hình IDLE.
Đặt tùy chọn¶
Có thể thay đổi tùy chọn phông chữ, đánh dấu, phím và tùy chọn chung thông qua Định cấu hình IDLE trên menu Tùy chọn. Cài đặt người dùng không mặc định được lưu trong thư mục .idlerc trong thư mục chính của người dùng. Các vấn đề do tệp cấu hình người dùng xấu gây ra được giải quyết bằng cách chỉnh sửa hoặc xóa một hoặc nhiều tệp trong .idlerc.
Trên tab Phông chữ, hãy xem mẫu văn bản để biết hiệu ứng của kiểu phông chữ và kích thước trên nhiều ký tự trong nhiều ngôn ngữ. Chỉnh sửa mẫu để thêm các ký tự khác mà cá nhân quan tâm. Sử dụng mẫu để chọn phông chữ đơn cách. Nếu các ký tự cụ thể gặp sự cố trong Shell hoặc trình chỉnh sửa, hãy thêm chúng vào đầu mẫu và thử thay đổi kích thước đầu tiên rồi đến phông chữ.
Trên tab Điểm nổi bật và Phím, chọn chủ đề và bộ phím màu có sẵn hoặc tùy chỉnh. Để sử dụng chủ đề màu hoặc bộ khóa tích hợp mới hơn với IDLE cũ hơn, hãy lưu nó dưới dạng chủ đề hoặc bộ khóa tùy chỉnh mới và các IDLE cũ hơn cũng có thể truy cập được.
IDLE trên macOS¶
Trong Tùy chọn hệ thống: Dock, người ta có thể đặt "Thích tab khi mở tài liệu" thành "Luôn luôn". Cài đặt này không tương thích với khung tk/tkinter GUI được IDLE sử dụng và nó phá vỡ một số tính năng của IDLE.
Tiện ích mở rộng¶
IDLE chứa tiện ích mở rộng. Có thể thay đổi tùy chọn cho tiện ích mở rộng bằng tab Tiện ích mở rộng của hộp thoại tùy chọn. Xem phần đầu của config-extensions.def trong thư mục Idlelib để biết thêm thông tin. Tiện ích mở rộng mặc định duy nhất hiện tại là zzdummy, một ví dụ cũng được sử dụng để thử nghiệm.
Idlelib --- triển khai ứng dụng IDLE¶
Source code: Lib/idlelib
Gói Lib/idlelib triển khai ứng dụng IDLE. Xem phần còn lại của trang này để biết cách sử dụng IDLE.
Các tập tin trong Idlelib được mô tả trong idlib/README.txt. Truy cập nó trong Idlelib hoặc nhấp vào Trợ giúp => Giới thiệu về IDLE trên menu IDLE. Tệp này cũng ánh xạ các mục menu IDLE tới mã triển khai mục đó. Ngoại trừ các tệp được liệt kê trong 'Khởi động', mã idlib là 'riêng tư' theo nghĩa là các thay đổi về tính năng có thể được chuyển ngược lại (xem PEP 434).