gpt4 book ai didi

python - 如何调试采用标准输入的 python CLI?

转载 作者:IT老高 更新时间:2023-10-28 20:54:32 25 4
gpt4 key购买 nike

我正在尝试调试我编写的可以从标准输入获取参数的 Python CLI。一个简单的测试用例的输出是

echo "test" | python mytool.py

相当于

的输出
python mytool.py test

我想用这个工具调试一些问题,所以我尝试运行这个:

echo "test" | pdb mytool.py

但我得到这个输出,然后 pdb 退出:

> /path/to/mytool.py(5)<module>()
-> '''
(Pdb) *** NameError: name 'test' is not defined
(Pdb)

当我将 -m python 添加到 shebang 时,如果我在脚本中运行 pdb.set_trace(),也会发生同样的事情。

这是怎么回事?

最佳答案

另一种选择是创建您自己的 Pdb 对象,并在那里设置标准输入和标准输出。我的概念证明涉及 2 个终端,但可以肯定的是,某些工作可以合并到某种非常不安全的网络服务器。

  1. 创建两个fifo:

    mkfifo fifo_stdin
    mkfifo fifo_stdout
  2. 在一个终端中,在后台打开stdout,然后写入stdin:

    cat fifo_stdout &
    cat > fifo_stdin
  3. 在你的 python 代码/控制台中创建 pdb 对象,并使用它:

    import pdb
    mypdb=pdb.Pdb(stdin=open('fifo_stdin','r'), stdout=open('fifo_stdout','w'))
    ...
    mypdb.set_trace()
    ...
  4. 利润!

您应该可以在第一个控制台上使用 pdb。

唯一的缺点是必须使用您的自定义 pdb,但在初始化时进行一些猴子补丁(PYTHONSTARTUP 或类似)会有所帮助:

import pdb
mypdb=pdb.Pdb(stdin=open('fifo_stdin','r'), stdout=open('fifo_stdout','w'))
pdb.set_trace=mypdb.set_trace

关于python - 如何调试采用标准输入的 python CLI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17074177/

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