【发布时间】:2021-11-12 12:04:56
【问题描述】:
我想在Makefile 中嵌入一个python 脚本
我构建了一个 python -c 脚本(如下),它在我的 MacBook Hyper terminal 中运行良好:
% python -c $'from subprocess import getstatusoutput\noutput=getstatusoutput("open --background -a Docker")\nif int(output[0])>0:\n print("Docker desktop failed to launch: exit-code:{}".format(output[0]))'
由于我还不知道的原因,如果我用它构建一个 Makefile,这似乎会失败(注意:一个制表符是四个空格...我在 Makefile 中使用了制表符缩进)。
all:
$(shell python -c $'from subprocess import getstatusoutput\noutput=getstatusoutput("open --background -a Docker")\nif int(output[0])>0:\n print("Docker desktop failed to launch: exit-code:{}".format(output[0]))')
运行make all 目标...
% make all
/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `python -c from subprocess import getstatusoutput\noutput=getstatusoutput("open --background -a Docker")\nif int(output[0])>0:\n print("Docker desktop failed to launch: exit-code:{}".format(output[0]))''
make: `all' is up to date.
%
我已经为此苦苦挣扎了一段时间......
有人可以帮助解释为什么make all 失败以及修复此python -c 命令的最佳方法吗?我的 shell CLI python -c ... 命令在我的 MacBook 上成功启动了 Docker 桌面。
我知道有非 python 方法可以解决这个特定问题...我需要一个通用的 python Makefile 解决方案。
【问题讨论】:
-
您可以将该脚本提取到 Python 文件中,然后运行它吗?这样可以解决各种逃逸问题,而且似乎更易于维护。
-
我考虑在
Makefile中调用一个单独的.py 脚本,但我想要Makefile中的所有变量和控制本机。我同意 oneliners 维护起来并不有趣...... -
在食谱中使用
$(shell ...)是一个常见的初学者错误,我们有一个规范的重复项:stackoverflow.com/questions/10024279/…
标签: python docker unix makefile subprocess