2010-06-23 89 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自述文件。