Trả lời cho câu hỏi là: Có nhiều cách khác nhau để in stderr trong python nhưng điều đó phụ thuộc vào 1.) phiên bản python nào chúng ta đang sử dụng 2.) đầu ra chính xác mà chúng ta muốn.
Sự khác biệt giữa chức năng ghi của print và stderr:
stderr : stderr (lỗi tiêu chuẩn) là đường ống được tích hợp trong mọi hệ thống UNIX / Linux, khi chương trình của bạn gặp sự cố và in ra thông tin gỡ lỗi (như truy nguyên trong Python), nó sẽ chuyển sang stderr ống.
print : print là một trình bao bọc định dạng các đầu vào (đầu vào là khoảng trắng giữa đối số và dòng mới ở cuối) và sau đó nó gọi hàm ghi của một đối tượng đã cho, đối tượng đã cho theo mặc định là sys.stdout, nhưng chúng ta có thể vượt qua một tập tin tức là chúng ta cũng có thể in đầu vào trong một tập tin.
Python2: Nếu chúng ta đang sử dụng python2 thì
>>> import sys
>>> print "hi"
hi
>>> print("hi")
hi
>>> print >> sys.stderr.write("hi")
hi
Dấu phẩy của Python2 trong Python3 trở thành một tham số, vì vậy nếu chúng ta sử dụng dấu phẩy để tránh dòng mới sau khi in, thì trong Python3 trông giống như in ('Text to print', end = '') là lỗi cú pháp trong Python2 .
http://python3porting.com/noconv.html
Nếu chúng ta kiểm tra tương tự trên sceario trong python3:
>>> import sys
>>> print("hi")
hi
Trong Python 2.6 có một lần nhập trong tương lai để in thành một hàm. Vì vậy, để tránh mọi lỗi cú pháp và các khác biệt khác, chúng ta nên bắt đầu bất kỳ tệp nào mà chúng ta sử dụng print () với nhập print_factor trong tương lai . Quá trình nhập trong tương lai chỉ hoạt động trong Python 2.6 trở lên, vì vậy đối với Python 2.5 trở về trước, bạn có hai tùy chọn. Bạn có thể chuyển đổi bản in phức tạp hơn thành một cái gì đó đơn giản hơn hoặc bạn có thể sử dụng một chức năng in riêng biệt hoạt động trong cả Python2 và Python3.
>>> from __future__ import print_function
>>>
>>> def printex(*args, **kwargs):
... print(*args, file=sys.stderr, **kwargs)
...
>>> printex("hii")
hii
>>>
Trường hợp: Điểm cần lưu ý rằng sys.stderr.write () hoặc sys.stdout.write () (stdout (đầu ra tiêu chuẩn) là một đường ống được tích hợp trong mọi hệ thống UNIX / Linux) không phải là sự thay thế cho in ấn, nhưng có chúng ta có thể sử dụng nó như là một thay thế trong một số trường hợp. In là một trình bao bọc kết thúc đầu vào với không gian và dòng mới ở cuối và sử dụng chức năng ghi để ghi. Đây là lý do sys.stderr.write () nhanh hơn.
Lưu ý: chúng tôi cũng có thể theo dõi và gỡ lỗi bằng cách sử dụng Ghi nhật ký
#test.py
import logging
logging.info('This is the existing protocol.')
FORMAT = "%(asctime)-15s %(clientip)s %(user)-8s %(message)s"
logging.basicConfig(format=FORMAT)
d = {'clientip': '192.168.0.1', 'user': 'fbloggs'}
logging.warning("Protocol problem: %s", "connection reset", extra=d)
https://docs.python.org/2/l Library / global.html # omgger-objects