1
我想用Python的子進程在gdb中非交互式地執行幾個命令。使用子進程Popen與多個引用的參數
等效命令我在shell執行將是:
gdb - 9833 -ex "set someval=50" -ex "p someval" --batch
我想下面的輸出:
[Thread debugging using libthread_db enabled]
[New Thread 0x2b6c64f09dc0 (LWP 9833)]
[New Thread 0x549ec940 (LWP 12128)]
[New Thread 0x585f2940 (LWP 12127)]
: ...
0x0000003670407655 in pthread_join() from /lib64/libpthread.so.0
$1 = 50
當我嘗試腳本它在Python中得到的結果相同,gdb參數不會被執行。我使用cmdline參數填充命令字符串。
我看到GDB連接到PID當我打印輸出,但我沒有看到GDB打印輸出,並且既沒有執行。
這裏是我的腳本:
cmd = ['gdb','-',pid,'-ex','"set ' + sys.argv[2] + '=' + sys.argv[3] + '"','-ex','"p ' + sys.argv[2] + '"','--batch']
print cmd
result = subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()
print result
謝謝你,@larsks。你的迴應確實清除了我對cmd格式的混亂理解。不幸的是我在我的環境中停留在Python 2.4,所以我不能使用更優雅的str格式。