在Python中,以下代碼片段將在執行時打開交互式shell。Python:code.interact(local = locals())其中stdin/stdout不可用
import code; code.interact(local = locals())
這已被證明非常有用的調試相當多的代碼是很少記錄。人們可以使用shell來瀏覽程序內環境並找出發生了什麼,即使沒有調試器。到現在爲止還挺好。
現在的挑戰。
我正在使用的軟件(用Django寫的)使用某種調度機制,然後對話另一個 Python進程,除了編輯代碼之外,我無法控制它。除了發送給它進行處理的變量之外,我沒有任何輸入。
但是,我不知道代碼如何工作,因爲文檔非常差,所以我想用code.interact
方法來解決問題。
但是這個過程是由一些特殊的調度軟件在背景的某個地方開始的,所以流程不會從Django應用程序轉移到我希望檢查的部分。相反,信號和對象被髮送,然後在任意時間(10-200ms之間的任何時間)以完全不同的過程運行。當接收到信號和對象時,標準輸出/標準輸出完全不在畫面中。
所以我想通過指定readfunc
參數來代替使用stdin/stdout來與code.interact
通信,我可以使用文件句柄或Unix套接字。我試過這個open()
ing文件和套接字,但無濟於事。
現在我試圖讓它僅僅從Django進程本身開始工作,所以即使調度問題不存在問題,並且交互式shell真的開始時,它立即關閉,既不接受帶有命令的文件作爲內容,也不是Python命令管道的Unix套接字。
長話短說;是否可以通過除stdin/stdout以外的其他方式與code.interact
調用的交互式shell進行通信?如果是這樣,怎麼樣?
在此先感謝。