4

buildout でビルドされたスクリプトで、バッファリングされていない出力を使用する必要があります。

私のアプローチは-u、生成されたスクリプトで Python のフラグを指定することでした。

ここに私の buildout.cfg があります:

[buildout]
parts = python
develop = .

[python]
recipe = zc.recipe.egg:scripts
eggs = myproject

そして setup.py:

from setuptools import setup, find_packages

setup(
    name = 'myproject',
    packages = find_packages(),
    entry_points = """
    [console_scripts]
    myscript = myproject:main
    """,
)

この構成で次のシバンを取得します。

$ pip install .
$ head -n1 /usr/local/bin/myscript
#!/usr/bin/python

そして、私はこれが欲しい:

#!/usr/bin/python -u

どうやってするの?に と を追加arguments = -uinterpreter = python -uてみましたbuildout.cfg。うまくいきませんでした。

4

1 に答える 1

3

ファイル番号で新しいファイルオブジェクトを開いてstdinまたはstdoutを再度開くと、Pythonスクリプト内からバッファリングされていないI/Oを強制できます。

import io, os, sys
try:
    # Python 3, open as binary, then wrap in a TextIOWrapper
    unbuffered = io.TextIOWrapper(open(sys.stdout.fileno(), 'wb', 0), write_through=True)
except TypeError:
    # Python 2
    unbuffered = os.fdopen(sys.stdout.fileno(), 'w', 0)

stdoutまたはstdinを使用する他のモジュールまたはビルトインを使用する場合は、sys.stdoutを再割り当てできます。

sys.stdout = unbuffered

プログラム内からPythonのバッファリングされていないstdout(python -uのように)も参照してください

于 2011-03-26T16:59:08.060 に答える