5

我正在用 python 开发 FUSE 文件系统。问题是,在安装文件系统后,我无法从我的 fuse 脚本访问 stdin/stdout/stderr。我没有看到任何东西,甚至是追溯。我正在尝试像这样启动 pdb:


import pdb
pdb.Pdb(None, open('pdb.in', 'r'), open('pdb.out', 'w')).set_trace()

一切正常,但非常不方便。我想将 pdb.in 和 pdb.out 制作为 fifo 文件,但不知道如何正确连接。理想情况下,我想在一个终端中键入命令并查看输出,但即使有两个终端也会很高兴(一个输入命令并在另一个终端中查看输出)。问题:

1)在没有标准输入/标准输出的情况下运行 pdb 是否更好/其他方式?

2)如何将标准输入重定向到 pdb.in fifo(我输入的所有内容都必须转到 pdb.in)?如何将 pdb.out 重定向到标准输出(“cat pdb.out”出现奇怪的错误,但也许我不明白)

4

3 回答 3

6

好的。正是我想要的,已经在http://pypi.python.org/pypi/rpdb/0.1.1完成了。

于 2010-06-30T10:36:03.903 回答
5

在启动 python 应用程序之前

mkfifo pdb.in
mkfifo pdb.out

然后当调用 pdb 时,您可以使用这两个 cat 命令与它进行交互,一个在后台运行

cat pdb.out & cat > pdb.in

注意 readline 支持不起作用(即向上箭头)

于 2012-09-01T10:22:50.320 回答
1

我刚刚在一个更简单的用例中遇到了类似的问题:

  • 调试一个从命令行运行的简单 Python 程序,该程序将文件通过管道传输到sys.stdin.,这意味着无法使用控制台pdb

我最终通过使用wdb解决了它。

我的用例的快速概述。在 shell 中,安装 wdb 服务器和 wdb 客户端:

pip install wdb.server wdb

现在启动 wdb 服务器:

wdb.server.py

现在您可以使用浏览器导航到 localhost:1984 并看到一个列出所有正在运行的 Python 程序的界面。上面的 wdb 项目页面说明了如果您想调试这些正在运行的程序中的任何一个,您可以做什么。

至于您控制的程序,您可以从头开始调试它:

wdb myscript.py --script=args < and/stdin/redirection

或者,在您的代码中,您可以执行以下操作:

import wdb; wdb.set_trace()

这将在您的浏览器(如果是本地)中弹出一个界面,显示跟踪的程序。

或者,您可以导航到 wdb.server.py 端口,以查看正在运行的 Python 程序列表顶部的所有正在进行的调试会话,然后您可以使用它们来访问所需的特定调试会话。

请注意,在跟踪期间导航代码的命令与标准命令不同pdb,例如,单步执行您使用的函数.s而不是单s步执行使用.n而不是n. 有关详细信息,请参阅wdb上面链接中的 README。

于 2016-03-31T15:25:36.243 回答