Python 在验尸模式下启动pdb。任何避免键入的技巧;";

Python 在验尸模式下启动pdb。任何避免键入的技巧;";,python,pdb,Python,Pdb,我想创建一个小助手(例如shell函数),它允许我在pdb后期模式下调用任何python脚本 withpdb() { cmd="$1" ; shift python -m pdb -- "$(which $cmd)" "$@" } 例如,如果我键入 mycmd.py param1 param2 我遇到了错误,我想用pydb分析这些错误。 我只是在我的bash历史记录中使用withpdb withpbd mycmd.py param1 param2 现在,pdb是用我的脚本启

我想创建一个小助手(例如shell函数),它允许我在pdb后期模式下调用任何python脚本

withpdb() {
    cmd="$1" ; shift
    python -m pdb -- "$(which $cmd)" "$@"
}
例如,如果我键入

mycmd.py param1 param2
我遇到了错误,我想用pydb分析这些错误。 我只是在我的bash历史记录中使用
withpdb

withpbd mycmd.py param1 param2
现在,pdb是用我的脚本启动的,只要我按下
c
并返回,脚本就会启动

我的问题是: 有没有什么技巧可以避免键入首字母“c”+enter


如果我必须用python或其他alngauge编写一些包装器代码,也可以

使用
-c
选项在启动时执行
c
。(由于只需编写一次函数,为清晰起见,请使用
continue
而不是缩写。)


使用
-c
选项在启动时执行
c
。(由于只需编写一次函数,为清晰起见,请使用
continue
而不是缩写。)


我想您可以尝试类似于
echocc | python-mpdb--$(哪个$cmd)“$@”
。(没关系,只是尝试了一下,但没有成功,因为进程在到达stdin结尾时退出)是的,问题是注入一个“c”+enter,然后将控制权交给控制台。除了脚本,你可能还可以使用其他脚本,但这似乎有点繁重,我想知道thre是否是一种告诉pdb获取一些启动命令的方法。稍后我将深入讨论文档。不相关,但引用函数中的参数展开式。如果您的路径名包含空格或全局字符,它将不必要地失败
python-m pub--“$(其中“$cmd”)”$@
。具有讽刺意味的是,
cmd=$1
就可以了,因为赋值右侧的扩展不会进行分词或路径名扩展。谢谢@chepner。很高兴知道。将使用PDB更改
{echo c;cat;}|…
应该可以工作;只要
cat
保持打开状态,标准错误就会保持打开状态,但您将失去shell可能提供的
cat
没有的任何编辑功能。(您可以将管道放在函数中,但出于刚才描述的原因,可能不值得这样做。)我想您可以尝试类似于
echo c | python-m pdb--$(其中$cmd)“$@
。(没关系,只是尝试了一下,但没有成功,因为进程在到达stdin结尾时退出)是的,问题是注入一个“c”+enter,然后将控制权交给控制台。除了脚本,你可能还可以使用其他脚本,但这似乎有点繁重,我想知道thre是否是一种告诉pdb获取一些启动命令的方法。稍后我将深入讨论文档。不相关,但引用函数中的参数展开式。如果您的路径名包含空格或全局字符,它将不必要地失败
python-m pub--“$(其中“$cmd”)”$@
。具有讽刺意味的是,
cmd=$1
就可以了,因为赋值右侧的扩展不会进行分词或路径名扩展。谢谢@chepner。很高兴知道。将使用PDB更改
{echo c;cat;}|…
应该可以工作;只要
cat
保持打开状态,标准错误就会保持打开状态,但您将失去shell可能提供的
cat
没有的任何编辑功能。(您可以将管道放在函数中,但出于刚才描述的原因,可能不值得这样做。)我很惊讶这是可行的(注意,它似乎只适用于Python 3)。实际上,它是在Python 3.2中引入的。我不再讨论Python 2,除非问题特别提到它。太好了。一切正常。使用py2的时间还有几个月,但主要是py3,所以没有问题,它只在3.2版以后才起作用。我很惊讶它能起作用(注意,它似乎只在Python3上起作用)。实际上,它是在Python3.2中引入的。我不再讨论Python 2,除非问题特别提到它。太好了。一切正常。使用py2的时间还有几个月,但主要是py3,所以没有问题,它只能从3.2开始工作
withpdb() {
  cmd="$1" ; shift
  python -m pdb -c continue -- "$(which $cmd)" "$@"
}