如何从bash脚本发送密钥到python pdb shell?

46scxncf  于 2023-01-13  发布在  Shell
关注(0)|答案(2)|浏览(113)

我正在尝试创建一个bash脚本,它运行一个带有pdb跟踪集的python3脚本。因此,在我的bash脚本中,我有以下几行:

python3 path/to/my_script.py
n

我想让bash运行python脚本,然后打开python调试器。然后,bash脚本将向pdb shell发送键'n',以便pdb执行python脚本中的第一行。
脚本没有按预期工作,bash等待python脚本完成(或退出),然后在命令行中执行“n”,这将打开node。
我想这可能是pdb shell特有的问题,所以我尝试在bash中执行以下命令:

python3
print("Hello")

但是,我们再次观察到脚本创建了python3 shell,然后等待shell退出,然后才在终端中执行print("Hello")。我知道我可以在这种情况下使用python3 -c,但这并不能解决在运行脚本的上下文中将命令传递给pdb shell的情况。
是否有办法将“n”命令发送到Python脚本生成的PDB shell?

uxh89sit

uxh89sit1#

你的代码将尝试运行两个命令。首先,它将运行你的python脚本,然后它将尝试运行一个名为n的命令。假设你的脚本需要你从stdin读取,你可以做以下之一:

使用herestring

python3 path/to/my_script.py <<< "n"

使用pipeline

echo "n" | python3 path/to/my_script.py Echo并不是您可以使用的唯一命令,您还可以使用printf甚至yes

fbcarpbf

fbcarpbf2#

您可以使用协处理从pdb发送和接收。

#! /bin/bash

send() {
    echo "$1" >&${PDB[1]}
}

recv() {
    IFS= read -r -u ${PDB[0]} line
    echo $line
}

coproc PDB { /path/to/my_script.py; }
send 'n'
recv
#...
send 'n'
recv

相关问题