Возможно, это то, что вы ищете: Как мне запустить команду python 'sdist' из автоматизированного скрипта python без использования подпроцесса?
Я собираюсь показать несколько вариантов запуска кода Babel Python без создания нового подпроцесса от более высокого уровня к более низкому.
Это своего рода хак, взятый из ответов, связанных выше:
from setuptools.dist import Distribution
from babel.messages.frontend import extract_messages
dist = Distribution({'name': 'my-project', 'version': '1.0.0'}) # etc.
dist.script_name = 'setup.py'
cmd = extract_messages(dist)
cmd.ensure_finalized()
cmd.run() # TODO: error handling
Скрипт pylabel на самом деле делает что-то вроде этого:
from babel.messages.frontend import main
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(main())
Но вы можете не отправлять команды через sys.argv и фактически вызывать код Python CommandInterface из Babel.
Это мой любимый способ назвать это:
from babel.messages.frontend import CommandLineInterface
CommandLineInterface().run(['pybabel','extract','-F','babel.cfg','-k','lazy_gettext','-o','messages.pot','sample_project'])
CommandLineInterface().run(['pybabel','init','-i','messages.pot','-d','translations','-l','en'])
CommandLineInterface().run(['pybabel','compile','-d','translations'])
CommandLineInterface().run(['pybabel','update','-d','translations'])
Это самое близкое, что вы можете получить к низкоуровневому коду, если только вы не хотите начать копировать/вставлять и настраивать код Python. Опять же, это решение на 100% Python, и оно не вызывает новый процесс.
Удачи
person
Emilio
schedule
28.05.2019