python - 在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; )
解决方案
一个可能的问题是您的 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
推荐阅读
- javascript - 为什么我的承诺没有异步处理?
- javascript - 我们如何根据索引或通过 react-native flatlist 中的键检查/取消选中平面列表中的单个复选框
- reactjs - 路由器不在函数内部重定向
- php - 使用 Laravel 创建良好的 SEO 友好路线的问题
- actions-on-google - 将 Homegraph api 集成到我的智能家居中
- javascript - 在 Firebase 云函数中创建的无限循环(?)
- java - 将 bean 附加到自动装配列表
- javascript - 从 Google Cloud Function 中的 pubsubMessage 获取数据
- c# - 如何将一个表单加载到另一个表单的面板中
- ios - Core Data 和 Userdefaults 不存储数据