Мог попытаться использовать awk
:
<command> | awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0; fflush(); }'
Вы, возможно, должны удостовериться это <command>
продолжает буферизованный вывод линии, т.е. он сбрасывает свой поток вывода после каждой строки; метка времени awk
добавляет будет время, когда конец строки появился на ее входном канале.
Если awk показывает ошибки, то попробуйте gawk
вместо этого.
Конечно, вы можете расширить distutils с помощью новых команд. В файле конфигурации distutil добавьте:
[global]
command-packages=foo.bar
это может быть в distutils.cfg
в самом пакете distutils
, .. pydistutils.cfg
в вашем доме каталог (без начальной точки в Windows) или setup.cfg
в текущем каталоге.
Затем вам понадобится пакет foo.bar в каталоге пакетов вашего сайта Python.
Затем в этом пакете вы добавляете классы, реализующие ваши новые желаемые команды, такие как stage
, подклассы distutils.cmd - документация слабая, но есть много примеров, поскольку все существующие команды distutils являются тоже построили таким образом.
Это можно легко сделать с помощью distutils, создав подкласс distutils.core.Command внутри setup.py.
Например:
from distutils.core import setup, Command
import os, sys
class CleanCommand(Command):
description = "custom clean command that forcefully removes dist/build directories"
user_options = []
def initialize_options(self):
self.cwd = None
def finalize_options(self):
self.cwd = os.getcwd()
def run(self):
assert os.getcwd() == self.cwd, 'Must be in package root: %s' % self.cwd
os.system('rm -rf ./build ./dist')
Чтобы включить команду you должен ссылаться на него в setup ():
setup(
# stuff omitted for conciseness.
cmdclass={
'clean': CleanCommand
}
Обратите внимание, что вы также можете переопределить встроенные команды таким образом, например, что я сделал с 'clean'. (Мне не понравилось, как встроенная версия оставила после себя каталоги dist и build.)
% python setup.py --help-commands | grep clean
clean custom clean command that forcefully removes dist/build dirs.
Используется ряд соглашений:
Лучший пример для использования - это просто посмотреть исходный код для одна из команд по умолчанию, находящихся в PYTHON_DIR / distutils / command , например install.py или build.py .
Если вы хотите использовать несколько версий, то может помочь virtualenv с virtualenvwrapper .
См. ответ Алекса , если вам нужен способ сделать это с помощью distutils, но я считаю, что Paver лучше для такого рода вещей. Это значительно упрощает создание пользовательских команд или переопределение существующих. К тому же переход не так уж и сложен, если вы привыкли к distutils или setuptools.