Hiển thị đầu ra Python

Có thể xảy ra trường hợp bạn thực thi một tập lệnh Python và không có gì xảy ra, tôi. e. có vẻ như nó "treo" mà không hiển thị bất kỳ đầu ra nào

Ngay cả khi bạn bao gồm rõ ràng một số câu lệnh print() để gỡ lỗi sự cố, nó vẫn có thể không in bất cứ thứ gì ra thiết bị đầu cuối

Một trong những lý do tại sao tập lệnh Python của bạn không hiển thị bất kỳ đầu ra nào là vì nó lưu vào bộ đệm stdoutstderr thay vì in chúng

Điều này cũng có thể xảy ra nếu bạn thực thi tập lệnh Python từ đường dẫn CI/CD (e. g. sử dụng Jenkins, Gitlab-CI, TeamCity, v.v. ) hoặc nếu bạn chạy nó bằng Dockerfile

Ghi chú ngắn này cho biết cách giải quyết vấn đề khi tập lệnh Python “treo” và không hiển thị bất kỳ đầu ra nào

Mẹo hay. Cách kiểm tra phiên bản của gói Python. Đọc thêm →

Tập lệnh Python không hiển thị đầu ra

Để buộc các luồng stdoutstderr gửi đầu ra của tập lệnh Python thẳng tới thiết bị đầu cuối (hoặc tệp nhật ký), bạn có thể đặt biến môi trường PYTHONUNBUFFERED (thành bất kỳ giá trị nào khác với giá trị của 0) hoặc thực thi lệnh

# Shell
$ python -u script.py

# Dockerfile
CMD [ "python", "-u", "script.py" ]
0 với tùy chọn
# Shell
$ python -u script.py

# Dockerfile
CMD [ "python", "-u", "script.py" ]
1

Biến môi trường PYTHONUNBUFFERED có thể được đặt như sau

# Shell
$ export PYTHONUNBUFFERED=true
$ python script.py

# Dockerfile
ENV PYTHONUNBUFFERED=true
CMD [ "python", "script.py" ]

Hoặc bạn chỉ cần chạy lệnh

# Shell
$ python -u script.py

# Dockerfile
CMD [ "python", "-u", "script.py" ]
0 với tùy chọn
# Shell
$ python -u script.py

# Dockerfile
CMD [ "python", "-u", "script.py" ]
1

# Shell
$ python -u script.py

# Dockerfile
CMD [ "python", "-u", "script.py" ]

Sau khi sử dụng bất kỳ phương pháp nào ở trên, tập lệnh Python của bạn sẽ bắt đầu in đầu ra

Mẹo hay. Cách liệt kê tất cả các mô-đun Python được cài đặt cục bộ và tìm đường dẫn đến tệp nguồn của chúng. Đọc thêm →

Bài học về Console I/O này chứa tài liệu dành riêng cho Python chạy trực tiếp từ hệ vỏ Unix/Linux. Nó không áp dụng cho Python chạy trong Windows hoặc dưới các IDE phổ biến như IDLE hoặc PyCharm. Nhiều ví dụ sẽ thất bại theo nhiều cách khác nhau trong Windows hoặc với IDE

Trong ngữ cảnh của bài học này, từ "bàn điều khiển" ngụ ý màn hình hiển thị trực quan mà bạn nhìn thấy trước mặt khi ngồi vào bàn làm việc và cả bàn phím. Màn hình trực quan cung cấp đầu ra bảng điều khiển và bàn phím cung cấp "đầu vào bảng điều khiển. "


Cách đơn giản nhất để ghi vào bảng điều khiển hoặc màn hình trực quan là chức năng

$ python3.6 t4.py # Execute the python script.
Hello, world! 
$
0 của python

$ cat t4.py

________số 8_______

$ python3.6 t4.py # Execute the python script.
Hello, world! 
$

Khi câu lệnh

$ python3.6 t4.py # Execute the python script.
Hello, world! 
$
0 trong tập lệnh được thực thi, chuỗi 'Xin chào, thế giới. ' xuất hiện trên màn hình trực quan trước mặt chúng tôi. Về mặt kỹ thuật, chuỗi được ghi vào đầu ra tiêu chuẩn, thường là bàn điều khiển

Python dự trữ hai đối tượng tệp cho đầu ra của bàn điều khiển. đầu ra tiêu chuẩn và lỗi tiêu chuẩn

>>> import sys
>>> sys.stdout
<_io.TextIOWrapper name='' mode='w' encoding='UTF-8'>
>>> sys.stderr
<_io.TextIOWrapper name='' mode='w' encoding='UTF-8'>
>>> 
>>> import io
>>> isinstance(sys.stdout, io.TextIOWrapper)
True
>>> isinstance(sys.stderr, io.TextIOWrapper)
True
>>>

Cả hai đối tượng tệp trên luôn mở để ghi ở chế độ văn bản. Mỗi đối tượng tệp có bộ mô tả tệp liên quan

>>> sys.stdout.fileno()
1
>>> sys.stderr.fileno()
2

Bộ mô tả tệp 1 thường có nghĩa là đầu ra tiêu chuẩn, bộ mô tả tệp 2 thường có nghĩa là lỗi tiêu chuẩn. Khi bạn ghi vào thiết bị xuất chuẩn hoặc thiết bị xuất chuẩn, dữ liệu được ghi thường xuất hiện trên màn hình trực quan trước mặt bạn trừ khi đầu ra của chúng được chuyển hướng

$ cat t4.py

import sys
import os

print ('line 1 to stdout  ')
sys.stdout.write('line 2 to stdout  ')
os.write(1, b'line 3 to stdout  ')

$ python3.6 t4.py 
line 1 to stdout  
line 3 to stdout  line 2 to stdout  $ 

Dòng 3 được in trước dòng 2. Để tạo ra kết quả mong đợi, hãy xóa bộ đệm khi cần thiết

import sys
import os

print ('line 1 to stdout  ')
sys.stdout.write('line 2 to stdout  ') ; sys.stdout.flush()
os.write(1, b'line 3 to stdout  ')

$ python3.6 t4.py 
line 1 to stdout  
line 2 to stdout  line 3 to stdout  $

Để tạo đầu ra chấp nhận được, hãy thêm dòng mới vào cuối mỗi dòng nếu cần

print ('Hello, world!') # Contents of python script t4.py
0

print ('Hello, world!') # Contents of python script t4.py
1

print ('Hello, world!') # Contents of python script t4.py
2

print ('Hello, world!') # Contents of python script t4.py
3

print ('Hello, world!') # Contents of python script t4.py
4

print ('Hello, world!') # Contents of python script t4.py
5

Ghi đè chuyển hướng đầu ra[sửa | sửa mã nguồn]. sửa nguồn]

Nếu bạn muốn ghi đè chuyển hướng đầu ra để một số đầu ra đi đến thiết bị đầu cuối vô điều kiện, đây là một cách để làm điều đó