gpt4 book ai didi

python - 使用带有多个引用参数的子进程 Popen

转载 作者:太空宇宙 更新时间:2023-11-04 10:07:11 25 4
gpt4 key购买 nike

我正在尝试使用 Python 的子进程以非交互方式在 gdb 中执行几个命令。

我在 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 args 来填充命令字符串。

当我打印输出时,我看到 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 格式。

最佳答案

你引用的太多了。如果您有如下所示的 shell 命令:

echo "this is a test"

对 subprocess.Popen 的等效调用是:

subprocess.Popen(['echo', 'this is a test'])

这是一个包含两个元素的命令,就像在 shell 命令中一样,第二个参数包含空格。

考虑到这一点,这:

gdb - 9833 -ex "set someval=50" -ex "p someval" --batch

变成这样:

cmd = ['gdb','-',pid,
'-ex','set ' + sys.argv[2] + '=' + sys.argv[3],
'-ex','p ' + sys.argv[2],
'--batch']

虽然我认为这是到达同一个地方的一种稍微更清晰的方式:

cmd = ['gdb','-',pid,
'-ex', 'set {}={}'.format(sys.argv[2], sys.argv[3]),
'-ex', 'p {}'.format(sys.argv[2]),
'--batch']

关于python - 使用带有多个引用参数的子进程 Popen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40414616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com