运行C+的构建+;Python脚本中的代码(make) 我想在编译时用python脚本编译C++中的代码,在X目录中运行“制作”。编译代码大约需要几秒钟,所以我使用时间模块让脚本休眠60秒来完成代码的编译

运行C+的构建+;Python脚本中的代码(make) 我想在编译时用python脚本编译C++中的代码,在X目录中运行“制作”。编译代码大约需要几秒钟,所以我使用时间模块让脚本休眠60秒来完成代码的编译,python,c++,shell,scripting,Python,C++,Shell,Scripting,代码如下: from subprocess import call from time import sleep def make_ut_adsmain(): os.system("make ../../ads/main/unittest") # call(["ls", "-l"]) sleep(60) make_ut_adsmain() # Run other functions when compiled... 错误 make: ***

代码如下:

from subprocess import call
from time import sleep
def make_ut_adsmain():
        os.system("make ../../ads/main/unittest")
        # call(["ls", "-l"])
        sleep(60)

make_ut_adsmain()

# Run other functions when compiled...
错误

make: *** No rule to make target `../../ads/main/unittest'.  Stop.

代码永远不会真正编译,因为代码的其余部分依赖于从未创建的日志文件。请指导我。

我实际上已经解决了这个问题,并且能够使用以下代码运行构建过程:

import subprocess
from time import sleep
def make_ut_adsmain():
        subprocess.Popen(["make"], stdout=subprocess.PIPE, cwd="../../ads/main/unitest")
        sleep(60)

make_ut_adsmain()
注意,只有在需要绕过错误时,前面的解决方案才有效。正确的方法如下。查看@tdelaney comment并阅读有关python文档的更多信息


在该目录中手动运行make是否有效?这似乎并不表示python找不到Makefileyup。我只是能够解决它。在下面发布了解决方案。这存在重大问题。您可以通过更改
cwd
来解决一个问题,但将
stdout
设置为一个管道,但不读取它(如果打印一组数据,make将死锁),然后您可以任意休眠60秒,而不是等待调用完成。至少,执行
子流程。检查_调用([“make”],cwd=“../../ads/main/unitest”)
)并完全摆脱睡眠。谢谢@tdelaney:我阅读了文档,这很有意义。但您的最低解决方案给了我错误:subprocess.CalledProcessError:Command'['make']'返回非零退出状态2。太棒了!这意味着make失败了,你需要弄清楚这一点。您的原始脚本默默地忽略了错误。@tdelaney我现在明白了。但是为了在我的dev机器上进行测试,我仍然需要坚持我的原始解决方案,因为有一个错误我需要忽略并运行编译的二进制文件。谢谢你的建议!(另外,如果你能删除downvote,那就太好了)因为这不适用于我正在寻找的东西。谢谢。我想你还想消除睡眠。。。然后看起来不错,我会取消否决票。
import subprocess
from time import sleep
def make_ut_adsmain():
        subprocess.check_all(["make"], cwd="../../ads/main/unitest")

make_ut_adsmain()