代码之家  ›  专栏  ›  技术社区  ›  Mykola Kharechko

使用FIFO在没有stdin/stdout的情况下运行pdb

  •  5
  • Mykola Kharechko  · 技术社区  · 14 年前

    我正在用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”中有奇怪的错误,但可能我不理解某些内容)

    3 回复  |  直到 8 年前
        1
  •  6
  •   Mykola Kharechko    14 年前

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

        2
  •  4
  •   rstonehouse    12 年前

    在启动python应用程序之前

    mkfifo pdb.in
    mkfifo pdb.out
    

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

    cat pdb.out & cat > pdb.in
    

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

        3
  •  1
  •   LeoRochael    8 年前

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

    • 调试从命令行运行的简单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 有关详细信息,请参阅上面链接中的自述文件。