Python 使用FIFO在没有标准输入/标准输出的情况下运行pdb

Python 使用FIFO在没有标准输入/标准输出的情况下运行pdb,python,bash,pdb,Python,Bash,Pdb,我正在用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文件,但不知道如何正确连接。理想情况下,我希望在一个终端中键入命令并查

我正在用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) 在没有stdin/stdout的情况下运行pdb是否更好


2) 如何将stdin重定向到pdb.in fifo(我键入的所有内容都必须转到pdb.in)?如何将pdb.out重定向到stdout(我在“cat pdb.out”中出现了奇怪的错误,但可能我不明白什么)

好的。这正是我想要的,已经完成了

好的。这正是我想要的,已经完成了

在启动python应用程序之前

mkfifo pdb.in
mkfifo pdb.out
然后,当调用pdb时,您可以使用这两个cat命令与之交互,其中一个在后台运行

cat pdb.out & cat > pdb.in

注意:在启动python应用程序之前,readline支持不起作用(即向上箭头)

mkfifo pdb.in
mkfifo pdb.out
然后,当调用pdb时,您可以使用这两个cat命令与之交互,其中一个在后台运行

cat pdb.out & cat > pdb.in

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

我只是在一个简单得多的用例中遇到了类似的问题:

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

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

pip install wdb.server wdb
现在使用以下命令启动wdb服务器:

wdb.server.py
现在,您可以使用浏览器导航到localhost:1984,并看到一个列出所有正在运行的Python程序的界面。上面的wdb项目页面有一些说明,说明了如果要调试这些正在运行的程序,可以执行哪些操作

对于您控制下的程序,您可以从一开始就使用以下工具进行调试:

wdb myscript.py --script=args < and/stdin/redirection
这将在浏览器中弹出一个界面(如果是本地的),显示跟踪的程序

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


请注意,跟踪期间用于导航代码的命令与标准的
pdb
命令不同,例如,要单步进入使用
.s
而不是
s
的函数,以及要单步使用
.n
而不是
n
。有关详细信息,请参阅上面链接中的
wdb
自述文件。

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

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

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

pip install wdb.server wdb
现在使用以下命令启动wdb服务器:

wdb.server.py
现在,您可以使用浏览器导航到localhost:1984,并看到一个列出所有正在运行的Python程序的界面。上面的wdb项目页面有一些说明,说明了如果要调试这些正在运行的程序,可以执行哪些操作

对于您控制下的程序,您可以从一开始就使用以下工具进行调试:

wdb myscript.py --script=args < and/stdin/redirection
这将在浏览器中弹出一个界面(如果是本地的),显示跟踪的程序

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

请注意,跟踪期间用于导航代码的命令与标准的
pdb
命令不同,例如,要单步进入使用
.s
而不是
s
的函数,以及要单步使用
.n
而不是
n
。有关详细信息,请参阅上面链接中的
wdb
自述