3

我正在使用 python 使用 Jdebug 系统调用并尝试自动化“bt”命令的过程,如下所示。

它由两个步骤组成。

jdebug core-tarball.0.tgz

收到的回复:

Using '/tmp' as temporary  location
jdebug version: 5.0.0
[File is compressed. This may take a moment...]
....
[Current thread is 1 (LWP 100276)]

(gdb) 

如上所示(gdb)提示出现,现在我需要传递“bt”命令并从 gdb 提示中读回响应。

不知道如何通过 python 或 shell 脚本发送“bt”命令并读回响应。

我希望自动化这两个步骤:

Step #1: jdebug filename 
Step #2  bt

[在 gdb 提示符下调用 'bt' 并读回响应行,即 stack_trace 信息] 通过 pyton 或通过 os.system 调用。

4

2 回答 2

2

您可以使用子进程模块的 Popen 写入标准输入:

from subprocess import Popen, PIPE
proc = Popen(['jdebug', 'core-tarball.0.tgz'], stdin=PIPE)
proc.stdin.write("bt\r")
于 2020-08-09T11:50:16.403 回答
1

您可以为此使用Popen.communicate()

import subprocess
p = subprocess.Popen(["jdebug", "core-tarball.0.tgz"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
stdout_data, stderr_data = p.communicate("bt")
print(stdout_data)
print(p.returncode)
于 2020-08-12T23:09:41.480 回答