我试图在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”)
有人可以帮我解决这个问题吗?
答案 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