通过make命令调用python脚本

通过make命令调用python脚本

我有一个带有 5 个 python 脚本的工具py,py,py,d.pypy。我必须在 Linux 中运行这个程序。py是我运行的一个程序,它导入其他文件并使用它们。为了运行 A.py,我使用命令

$ python A.py

到目前为止,输入和输出路径都是硬编码在 A.py 中。现在我应该写一个生成文件包含所有文件结构和依赖项。该 makefile 还应包含用于执行 python scrip A.py 的命令。当make makefile调用命令并且工具应该开始运行时,必须了解所需的输入和输出路径。这个怎么做?

编辑:

makefile 应该是这样的,包含所有这些细节。

INPUT_PATH = list of all input paths
FILES = list of .c files located in the above specified paths
OUTPUT_PATH = output path where generated file has to be stored
command to execute python scrip:
   A.py inputpath+filename outputpath

因此,每当有新的输入 .c 文件时,它们都会被添加到 makefile 的列表中。您可以建议任何此类示例 makefile 吗?

答案1

在 python 中,你可以从 so 获取命令行参数,sys.argv而不是

#!/usr/bin/env python
base_dir = /hard/coded/path

你做:

#!/usr/bin/env python
import sys
base_dir = sys.argv[1]

(放入支票可能是合适的)。如果你明确地使用 python 启动程序,你可以省略第一行,但如果你制作A.py可执行文件,你会需要它,那么在那里也没有什么坏处。

现在您可以在您的中makefile指定:

default:
        python A.py /hard/coded/path

(确保Tab前面有一个空格python,而不是 8 个空格。)

然后你可以运行make(不需要做,make makefile除非你有一个Makefile或与Gnu make aGNUmakefile在同一目录中)

答案2

在这里我发现了最优雅的做法生成文件

脚步:

  • 在这里定义一个变量我使用浏览器_PYSCRIPT
  • 输入要调用的 python(或任何语言)脚本。
  • 使用export导出脚本
  • 使用 python -c "$$BROWSER_PYSCRIPT" 执行脚本

运行生成文件:

简单使用:

  • 制作浏览器
    define BROWSER_PYSCRIPT
    import sys, os
    print ('sys.argv[0] =', sys.argv[0])
    pathname = os.path.dirname(sys.argv[0])
    print ('path =', pathname)
    print ('full path =', os.path.abspath(pathname))
    endef
    export BROWSER_PYSCRIPT
    BROWSER:
           python -c "$$BROWSER_PYSCRIPT"

结果:

    -> make BROWSER                                                                                                    [Thu Jun 11 23:13:45 2020]
python -c "$BROWSER_PYSCRIPT"
sys.argv[0] = -c
path =
full path = /Users/myPC/Desktop

答案3

我强烈建议您阅读基础知识生成文件教程

您基本上想要的是将路径放入宏中,在这些情况下,宏的工作方式与变量类似。

例如DIR=/your/path

请注意,指令如下所示:

directive:
        command

如果您的指令已命名default,否则all它将在不从命令行显式调用该指令的情况下执行。所以你不必调用 with make directive,只需make.

现在,命令前面的空格,必须是制表符。我还建议命名您的 makefile Makefile(大写“M”),这样您只需输入 即可调用它make

现在,您的脚本必须能够接收命令行参数(在本例中为目录),并且您可以调用类似以下内容的内容:

        python A.py $(DIR)

作为DIR具有正确目录名称的宏。

另外,我建议阅读相关内容GNU 制作手册

当然,Makefile 的内容远不止此范围中描述的内容。由于 makefile 是 Linux 开发中不可或缺的一部分,我强烈地建议至少掌握基础知识!

相关内容