我可以 运行 一个交互式命令吗?
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 测试)
我是 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 测试)