質問への回答は次のとおりです。Pythonでstderrを印刷する方法はいくつかありますが、それは1.)使用しているpythonのバージョンに依存しています。
printとstderrの書き込み関数の違い:
stderr:stderr(標準エラー)はすべてのUNIX / Linuxシステムに組み込まれているパイプであり、プログラムがクラッシュしてデバッグ情報(Pythonのトレースバックなど)を出力すると、stderrに送られますパイプ。
print:printは、入力をフォーマットするラッパー(入力は引数と最後の改行の間のスペースです)であり、指定されたオブジェクトの書き込み関数を呼び出します。指定されたオブジェクトはデフォルトではsys.stdoutですが、ファイルを渡します。つまり、入力をファイルに出力することもできます。
Python2:python2を使用している場合
>>> import sys
>>> print "hi"
hi
>>> print("hi")
hi
>>> print >> sys.stderr.write("hi")
hi
Python2の末尾のコンマはPython3でパラメーターになるため、印刷後の改行を回避するために末尾のコンマを使用すると、Python3ではこれはprint( 'Text to print'、end = '')のようになります。これはPython2での構文エラーです。
http://python3porting.com/noconv.html
上記のシナリオをpython3で確認すると、次のようになります。
>>> import sys
>>> print("hi")
hi
Python 2.6では、関数に出力するための将来のインポートがあります。したがって、構文エラーやその他の違いを回避するために、将来のインポートprint_function でprint()を使用するファイルを開始する必要があります。将来のインポートはPythonの2.6で動作し、後で、そうはPython 2.5およびそれ以前のための2つのオプションがあります。より複雑な印刷をより単純なものに変換するか、Python2とPython3の両方で機能する別の印刷関数を使用できます。
>>> from __future__ import print_function
>>>
>>> def printex(*args, **kwargs):
... print(*args, file=sys.stderr, **kwargs)
...
>>> printex("hii")
hii
>>>
ケース:sys.stderr.write()またはsys.stdout.write()(stdout(標準出力)は、すべてのUNIX / Linuxシステムに組み込まれているパイプです)は、印刷の代わりにはなりませんが、はい場合によっては、代替として使用できます。Printは、最後にスペースと改行で入力をラップし、write関数を使用して書き込むラッパーです。これがsys.stderr.write()の方が速い理由です。
注: Loggingを使用してトレースおよびデバッグすることもできます
#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/library/logging.html#logger-objects