首页 > 解决方案 > 在makefile中运行python脚本不起作用

问题描述

我想在makefile中运行一个python文件example.py :

python ../example.py; \

示例.py:

import os

f = open("test2.txt", "w")
f.write(os.getcwd())
f.close()

但是上面的命令不起作用,并且没有创建test2.txt文件。

如果我使用 -c 标志内联运行相同的代码,它可以工作并创建test1.txt并且 cwd 被写入它。

python -c 'import os; f = open("test1.txt", "w"); f.write(os.getcwd()); f.close();' \

有谁知道是什么问题?

编辑 Makefile 中的周围行:

$(OBJ_DIR)/$(FW_BASE).elf: $(FW_OBJS) $(TARGET_LIB_NAMES) $(rom_syms) fw.ld MemoryMap.ld $(OBJ_DIR)/overlay.ld
    @echo "Creating $@ for $(FW_BASE)"
    $(eval globalVar= $(shell $(NM) -S --radix dec $(FW_OBJS) $(TARGET_LIB_NAMES) | grep ' D \| B ' | tr -d '\r' | \
    awk  '{ FS=" "; k=0; split($$0, val); printf "--defsym __sizeI_%s=%d ", val[4], val[2]; k+=val[2]}';) --defsym INTLV=$(interleave))
    @$(eval sem := $@.sem)
    $(VERB)if $(PYBUILD)'ovl_layout(job=1, dn_obj="$(OBJ_DIR)", fn_lscript="$(FW_LD)")' && \
              $(LINK) $(FW_OBJS) -R $(rom_syms) $(TARGET_LIB_ARGS) --defsym __boot0_size=$(IRAM_SIZE) --defsym __boot1_size=$(OVERLAY_SIZE_BYTES) --defsym __cfe_size=$(CFE_SIZE) --defsym __cfe_storage_size=$(CFE_STORAGE_SIZE) -o $@ -T MemoryMap.ld -T $(FW_LD) -Map $(basename $@).map -r $(overlay_real) && \
              $(PYBUILD)'ovl_layout(job=2, dn_obj="$(OBJ_DIR)", fn_lscript="$(FW_LD)", fn_map="$(basename $@).map")' && \
              $(LINK) $(FW_OBJS) -R $(rom_syms) $(TARGET_LIB_ARGS) --defsym __boot0_size=$(IRAM_SIZE) --defsym __boot1_size=$(OVERLAY_SIZE_BYTES) --defsym __cfe_size=$(CFE_SIZE) --defsym __cfe_storage_size=$(CFE_STORAGE_SIZE) -o $@ -T MemoryMap.ld -T $(FW_LD) -Map $(basename $@).map -r $(overlay_real) $(globalVar) && \
              $(enum-sems) "$@" "$(sem)" && \
              $(LINK) $(FW_OBJS) -R $(rom_syms) $(TARGET_LIB_ARGS) --defsym __boot0_size=$(IRAM_SIZE) --defsym __boot1_size=$(OVERLAY_SIZE_BYTES) --defsym __cfe_size=$(CFE_SIZE) --defsym __cfe_storage_size=$(CFE_STORAGE_SIZE) $(extra_syms) @$(sem) -o $@ -T MemoryMap.ld -T $(FW_LD) -Map $(basename $@).map $(overlay_real) $(globalVar) \
              $(LDFLAGS); then $(SZ) $@; \
                               # python -c 'import os; f = open("test.txt", "w"); f.write(os.getcwd()); f.close();' \
                               python ../example.py; \
                               # $(PYBUILD) 'get_branch_addresses(elf_file="$(@)")'; \
                               $(NM) $(rom_syms) --format=possix | awk '{print $$1;}' > $(OBJ_DIR)/rom-symbols.txt; else \
                               $(VERB)$(dump-mem) $(basename $@).map; fi || ( $(VERB)$(dump-mem) $(basename $@).map; false; )

标签: pythonbashmakefile

解决方案


一个可能的问题是您的 python 脚本不在您期望的目录中。另一个可能的问题可能是您的 Makefile。我重新创建了您描述的设置并能够创建文件。在 Ubuntu 系统上都在同一个目录中;

# Makefile
all:
    python3 example.py
# example.py
import os

f = open("test2.txt", "w")
f.write(os.getcwd())
f.close()

运行后;

make 

生成 test2.txt 文件并包含 cwd


推荐阅读