我可以 运行 一个交互式命令吗?

Can I run an interactive command?

我是 waf 的新手,正在尝试实现我经常使用的 GNU make 技巧的模拟:

gdb: application.elf
    gdb -x gdbinit-debug $<

也就是说,允许 'make gdb' 启动交互式 GDB 会话进行调试。

我已经为 waf 编写了一个 GDB 任务,一个使用它的功能,并将它连接到一个顶级命令。但是我没有看到来自 GDB 的任何 I/O。据ps说是运行ning,不过我好像不让一起玩

有没有办法在 waf 中做到这一点?

编辑:我认为这是脚本的相关部分:

class gdb_task(Task):
    def run(self):
        cmd = [ self.env.GDB, '--silent', '--batch' ]
        for script in self.inputs[:-1]:
            cmd.extend(['-x', script.abspath()])
        cmd.append(self.inputs[-1].abspath())

        return self.exec_command(cmd)

    color = 'CYAN'

    def runnable_status(self):
        return RUN_ME

    def keyword(self):
        return 'GDB'

    def __str__(self):
        node = self.inputs[-1]
        return node.path_from(node.ctx.launch_node())

它工作正常,但是如果我关闭 --batch,它就会在 运行.

时挂起而没有输出

你要做的是添加

from sys import stderr,stdout

然后替换

return self.exec_command(cmd)

return self.exec_command(cmd,stdout=stdout,stderr=stderr)

(使用 Waf 1.9.11 和 Python 2.7.6 测试)