使用python脚本从不同目录调用make

时间:2010-06-25 21:25:39

标签: python linux

我需要在Python脚本中调用make(构建一个makefile),该目录与我所在的目录不同。如果我只是这样做:

build_ret = subprocess.Popen("../dir1/dir2/dir3/make",
                     shell = True, stdout = subprocess.PIPE)

我得到以下内容: / bin / sh:../ dir1 / dir2 / dir3 / make:没有这样的文件或目录

我试过了:

build_ret = subprocess.Popen("(cd ../dir1/dir2/dir3/; make)",
                     shell = True, stdout = subprocess.PIPE)

但忽略make命令。我甚至没有得到“没有什么可以构建”的消息。

我也尝试过使用“沟通”,但没有成功。这是在Red Hat Linux上运行的。

3 个答案:

答案 0 :(得分:9)

我会使用@ Philipp的使用cwd的解决方案,但作为旁注,您还可以使用-C选项进行制作:

make -C ../dir1/dir2/dir3/make

-C dir , - 目录= dir

  

在阅读makefile或执行其他操作之前,请转到目录 dir 。如果指定了多个-C选项,则每个选项都相对于前一个选项进行解释:-C / -C etc等同于-C /etc。这通常与make的递归调用一起使用。

答案 1 :(得分:5)

使用cwd参数,并使用Popen的列表形式:

subprocess.Popen(["make"], stdout=subprocess.PIPE, cwd="../dir1/dir2/dir3")

几乎从不需要调用shell,并且由于涉及额外的复杂性,可能会引起问题。

答案 2 :(得分:0)

尝试使用完整路径,您可以通过调用

获取python脚本的位置
sys.argv[0]

获取路径:

os.path.dirname(sys.argv[0])

你会在os.path module

中找到很多路径操作