强制使用 buildout 和 zc.recipe.egg:scripts 制作的脚本进行无缓冲输出

发布于 2024-10-27 19:14:13 字数 888 浏览 3 评论 0原文

我需要在使用构建构建的脚本中使用无缓冲的输出。

我的方法是在生成的脚本中为 Python 指定 -u 标志。

这是我的 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
    """,
)

使用此配置我得到以下 shebang:

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

我想要这个:

#!/usr/bin/python -u

如何做到这一点?我尝试将 arguments = -uinterpreter = python -u 添加到 buildout.cfg 中。它不起作用。

I need to use unbuffered output in a script that is built with buildout.

My approach was to specify the -u flag for Python in the generated script.

Here's my buildout.cfg:

[buildout]
parts = python
develop = .

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

And setup.py:

from setuptools import setup, find_packages

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

I get the following shebang with this configuration:

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

And I want this:

#!/usr/bin/python -u

How to do it? I tried adding arguments = -u and interpreter = python -u to buildout.cfg. It didn't work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

为你拒绝所有暧昧 2024-11-03 19:14:13

您可以通过在文件号上打开一个新文件对象来重新打开 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 的其他模块或内置程序,则可以重新分配 sys.stdout或标准输入:

sys.stdout = unbuffered

另请参阅 无缓冲标准输出来自程序内的 python(如 python -u)

You can force unbuffered I/O from within your Python script by re-opening stdin or stdout by opening a new file object on the filenumber:

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)

You can then reassign sys.stdout if you want to use other modules or build-ins that use stdout or stdin:

sys.stdout = unbuffered

Also see unbuffered stdout in python (as in python -u) from within the program

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文