2010-06-23 50 views
5

我正在用python开发FUSE文件系统。问题是,在安装文件系统后,我无法从我的保险丝脚本访问stdin/stdout/stderr。我什么都看不到,甚至是回溯。我试图推出像这样的pdb:使用FIFO运行没有标准输入/标准输出的pdb

 

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

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

1)是否更好/其他方式来运行pdb没有标准输入/标准输出?

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

回答

4

时PDB是叫你可以使用这两种猫命令与它进行交互,在后台

cat pdb.out & cat > pdb.in 

注意一个运行readline的支持不启动Python应用程序

mkfifo pdb.in 
mkfifo pdb.out 

在此之前工作(即向上箭头)

1

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

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

我最终通过使用wdb解决了这个问题。

快速破解我的用例。在外壳,同时安装WDB服务器和WDB客户端:

pip install wdb.server wdb 

现在启动与WDB服务器:

wdb.server.py 

现在你可以浏览到本地主机: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自述文件。

相关问题