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
# Shell $ export PYTHONUNBUFFERED=true $ python script.py # Dockerfile ENV PYTHONUNBUFFERED=true CMD [ "python", "script.py" ]2 để 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
# Shell $ export PYTHONUNBUFFERED=true $ python script.py # Dockerfile ENV PYTHONUNBUFFERED=true CMD [ "python", "script.py" ]3 và
# Shell $ export PYTHONUNBUFFERED=true $ python script.py # Dockerfile ENV PYTHONUNBUFFERED=true CMD [ "python", "script.py" ]4 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 cách sử dụng
# Shell $ export PYTHONUNBUFFERED=true $ python script.py # Dockerfile ENV PYTHONUNBUFFERED=true CMD [ "python", "script.py" ]5
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
# Shell $ export PYTHONUNBUFFERED=true $ python script.py # Dockerfile ENV PYTHONUNBUFFERED=true CMD [ "python", "script.py" ]3 và
# Shell $ export PYTHONUNBUFFERED=true $ python script.py # Dockerfile ENV PYTHONUNBUFFERED=true CMD [ "python", "script.py" ]4 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
# Shell $ export PYTHONUNBUFFERED=true $ python script.py # Dockerfile ENV PYTHONUNBUFFERED=true CMD [ "python", "script.py" ]8 [thành bất kỳ giá trị nào khác với
# Shell $ export PYTHONUNBUFFERED=true $ python script.py # Dockerfile ENV PYTHONUNBUFFERED=true CMD [ "python", "script.py" ]9] 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
# Shell $ export PYTHONUNBUFFERED=true $ python script.py # Dockerfile ENV PYTHONUNBUFFERED=true CMD [ "python", "script.py" ]8 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 →
Hàm
# Shell $ export PYTHONUNBUFFERED=true $ python script.py # Dockerfile ENV PYTHONUNBUFFERED=true CMD [ "python", "script.py" ]2 in đối tượng đã cho tới thiết bị đầu ra tiêu chuẩn [màn hình] hoặc tới tệp luồng văn bản
Ví dụ
message = 'Python is fun'
# print the string message
print[message]
# Output: Python is fun
in[] Cú pháp
Cú pháp đầy đủ của
# Shell $ export PYTHONUNBUFFERED=true $ python script.py # Dockerfile ENV PYTHONUNBUFFERED=true CMD [ "python", "script.py" ]2 là
print[*objects, sep=' ', end='\n', file=sys.stdout, flush=False]
in [] Tham số
- đối tượng - đối tượng để in. * chỉ ra rằng có thể có nhiều hơn một đối tượng
- sep - các đối tượng được phân tách bằng sep. Giá trị mặc định.
print[*objects, sep=' ', end='\n', file=sys.stdout, flush=False]
1 - end - end được in cuối cùng
- tệp - phải là một đối tượng có phương thức ghi [chuỗi]. Nếu bỏ qua,
print[*objects, sep=' ', end='\n', file=sys.stdout, flush=False]
2 sẽ được sử dụng để in các đối tượng trên màn hình - tuôn ra - Nếu Đúng, luồng bị buộc phải xóa. Giá trị mặc định.
print[*objects, sep=' ', end='\n', file=sys.stdout, flush=False]
3
Ghi chú. sep, end, file và flush là các đối số từ khóa. Nếu bạn muốn sử dụng đối số sep, bạn phải sử dụng
# Shell $ python -u script.py # Dockerfile CMD [ "python", "-u", "script.py" ]1
không phải
# Shell $ python -u script.py # Dockerfile CMD [ "python", "-u", "script.py" ]2
print[] Giá trị trả về
Nó không trả về bất kỳ giá trị nào;
ví dụ 1. Print[] hoạt động như thế nào trong Python?
# Shell $ python -u script.py # Dockerfile CMD [ "python", "-u", "script.py" ]3
đầu ra
# Shell $ python -u script.py # Dockerfile CMD [ "python", "-u", "script.py" ]4
Trong chương trình trên, chỉ có tham số đối tượng được truyền cho hàm
# Shell $ export PYTHONUNBUFFERED=true $ python script.py # Dockerfile ENV PYTHONUNBUFFERED=true CMD [ "python", "script.py" ]2 [trong cả ba câu lệnh in]
Vì thế,
- Dấu phân cách
print[*objects, sep=' ', end='\n', file=sys.stdout, flush=False]
1 được sử dụng. Lưu ý khoảng cách giữa hai đối tượng trong đầu ra - tham số kết thúc
print[*objects, sep=' ', end='\n', file=sys.stdout, flush=False]
6 [ký tự dòng mới] được sử dụng. Lưu ý, mỗi câu lệnh in hiển thị đầu ra trong dòng mới - tập tin là
print[*objects, sep=' ', end='\n', file=sys.stdout, flush=False]
2. Đầu ra được in trên màn hình - tuôn ra là
print[*objects, sep=' ', end='\n', file=sys.stdout, flush=False]
3. Luồng không bị buộc phải tuôn ra
ví dụ 2. print[] với các tham số dấu phân cách và kết thúc
# Shell $ python -u script.py # Dockerfile CMD [ "python", "-u", "script.py" ]9
đầu ra
# Shell $ export PYTHONUNBUFFERED=true $ python script.py # Dockerfile ENV PYTHONUNBUFFERED=true CMD [ "python", "script.py" ]0
Chúng tôi đã chuyển các tham số sep và end trong chương trình trên
ví dụ 3. print[] với tham số tệp
Trong Python, bạn có thể in các đối tượng vào tệp bằng cách chỉ định tham số tệp
đề xuất đọc. I/O tệp Python
# Shell $ export PYTHONUNBUFFERED=true $ python script.py # Dockerfile ENV PYTHONUNBUFFERED=true CMD [ "python", "script.py" ]1
Chương trình này cố gắng mở python. txt ở chế độ viết. Nếu tệp này không tồn tại, python. txt được tạo và mở ở chế độ viết
Ở đây, chúng tôi đã chuyển đối tượng tệp sourceFile cho tham số tệp. Đối tượng chuỗi 'Khá tuyệt, huh. ' được in ra con trăn. txt [kiểm tra nó trong hệ thống của bạn]