Это безумно поздно, но я узнал, как это сделать изнутри python (без проверки журналов), если кому-то интересно:
import distutils.sysconfig
import distutils.ccompiler
compiler = distutils.ccompiler.new_compiler()
distutils.sysconfig.customize_compiler(compiler)
print compiler.compiler_so # This attribute is what you want
Атрибут «compiler_so» — это список всех аргументов, которые distutils собирается использовать при компиляции чего-либо. Он добавляет имя файла и -c
(для объектных файлов), когда он фактически начинает компилироваться.
РЕДАКТИРОВАТЬ: я тестировал это только на macOS и Linux, не похоже, что это будет работать на Windows.
EDIT2: я должен добавить, что это не полная команда, а только аргументы перед обработкой distutils любых экземпляров Extension(). Остальные аргументы уникальны для расширения и зависят от аргументов вы указываете при создании класса расширения, например, sources, include_dirs, define_macros.
Если вам нужна полная необработанная команда, которую запускает distutils, единственный известный мне способ (без анализа журналов) — это получить строку команды в последнюю минуту после всей обработки и прямо перед функция создания. Вот невероятно хакерский способ сделать это:
# Put this at the very top of all your imports
import distutils.spawn
old_spawn = distutils.spawn.spawn
def my_spawn(*args, **kwargs):
print " ".join(args[0]) # <-- this is your command right here
old_spawn(*args, **kwargs)
distutils.spawn.spawn = my_spawn
Более элегантным было бы разветвить distutils и добавить эту функциональность, но это слишком много работы и прочего.
person
sciencectn
schedule
04.03.2015