2017-05-23 3 views
2

Ich bin neu in waf und zu versuchen, ein Analogon zu einer GNU machen Trick zu implementieren ich oft verwenden:Kann ich einen interaktiven Befehl ausführen?

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

Das heißt, erlauben ‚gdb machen‘ eine interaktive GDB-Sitzung für das Debuggen zu starten.

Ich habe eine GDB-Aufgabe für waf geschrieben, eine Funktion, die es verwendet, und es an einen Befehl der obersten Ebene angehängt. Aber ich sehe keine der I/O von GDB. Es läuft, laut ps, aber ich schein nicht mitspielen zu dürfen.

Gibt es eine Möglichkeit, dies in Waf geschehen zu lassen?

Edit: Hier ist der relevante Teil des Skripts, denke ich:

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()) 

Es funktioniert gut, aber wenn ich die --batch ausziehen, es hängt nur ohne Ausgabe bei der Ausführung.

+0

Konnten Sie waf wscript nachstellen, das das Problem reproduziert? Dieser Python-Einzeiler funktioniert für mich: 'python -c 'import subprocess; subprocess.call (["gdb", "a.out"]) '. ' – ks1322

+0

Ich bin fast sicher, dass waf subprocess.call nicht verwendet; Ich denke, es muss die I/O-Streams verbrauchen. –

Antwort

2

Was Sie tun möchten, ist

from sys import stderr,stdout 

hinzufügen und dann ersetzen

return self.exec_command(cmd) 

mit

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

(Getestet mit Waf 1.9.11 und Python 2.7.6)

+0

Super, danke! –

Verwandte Themen