无法从python子进程启动make命令。Popen

时间:2019-09-18 06:42:54

标签: python python-3.x macos makefile subprocess

我试图在macOS Mojave上通过python中的make构建项目,但得到以下输出:

  

如果有问题,请cd到src目录并在其中运行make
  cd src && / Library / Developer / CommandLineTools / usr / bin /首先创建
  rm -f auto / config.status auto / config.cache config.log auto / config.log
  rm -f auto / config.h auto / link.log auto / link.sed auto / config.mk
  触摸auto / config.h
  cp config.mk.dist自动/配置。

  流程结束,退出代码为0

但是,如果我尝试从终端启动make,一切正常。 这是我的python代码:

make_command = "make"
make_proc = subprocess.Popen(make_command, shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=args[1])

args [1] –包含项目的文件夹的路径,其正确的位置(“ /Users/kirill/.vim_updater”)

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

我是新手,仍然没有足够的声誉来发表评论。

因此,请随时尝试并告诉我,以便我删除此“答案”

使用subprocess.call()代替subprocess.Popen() 您还想查看返回码。

我认为您想等待结果。

对于测试,您还可以尝试使用make命令的绝对路径。

答案 1 :(得分:0)

正如您在问题Process finished with exit code 0中提到的那样。这意味着您的make命令成功了。您可以尝试以下改进的代码部分。

代码:

import subprocess
import sys

make_command = ["make"]
make_proc = subprocess.Popen(make_command, shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=sys.argv[1])
stdout, stderr = make_proc.communicate()
print("stdout: {}".format(stdout))
print("stderr: {}".format(stderr))
print("Return code: {}".format(make_proc.returncode))

输出:(如果特定文件夹中没有Makefile。由于缺少Makefile(错误),您会看到返回码不为零)

>>> python3 test.py .
stdout: b'make: *** No targets specified and no makefile found.  Stop.\n'
stderr: None
Return code: 2

如果我在Makefile(根)文件夹中创建一个.并包含以下内容。

制作文件:

FOO = Hello World

all:
    @echo $(FOO)
    @echo $(value FOO)

输出:Makefile存在于特定文件夹中,并且其内容正确,因此make成功,返回码为零(根据您的问题,您有相同的情况)。

>>> python3 test.py .
stdout: b'Hello World\nHello World\n'
stderr: None
Return code: 0