Добавьте аргументы Python в строку сценария shebang (скрипт, созданный с помощью buildout и zc.recipe.egg: scripts) - PullRequest
4 голосов
/ 26 марта 2011

Как указать аргументы для 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 = -u и interpreter = python -u к buildout.cfg. Это не сработало.

1 Ответ

3 голосов
/ 26 марта 2011

Вы можете форсировать небуферизованный ввод-вывод из скрипта Python, повторно открыв stdin или stdout, используя os.fdopen для номера файла:

import sys, os
unbuffered = os.fdopen(sys.stdout.fileno(), 'w', 0)

Затем вы можете переназначить sys.stdout, если хотите использовать другие модули или встроенные модули, которые используют stdout или stdin:

sys.stdout = unbuffered

Также смотрите небуферизованный стандартный вывод в python (как в python -u) из программы

...