在背景啟動 Repl/CLI 和 Feed 指令

在背景啟動 Repl/CLI 和 Feed 指令

假設pythonrepl 需要很長時間才能啟動,有沒有辦法在後台啟動它,以便我可以創建一個別名並為其提供諸如python-current "command to run".

答案1

python 發行版中沒有任何東西可以進行這種打開,「包含電池」也不例外。

像編輯器這樣的程式可以處理這類事情,因為當您開啟另一個檔案時,要做什麼非常清楚:您只需在新檔案上開啟一個視窗/選項卡,由相同的可執行檔案處理。

自己實現這樣的事情並不困難,但是您必須考慮當第一個命令尚未完成而第二個命令已安排時會發生什麼:

  • 中止第一個命令
  • 將第二個命令排隊
  • 並行運行(這需要額外的啟動時間,除非有多個執行緒等待命令)

我已經通知運行 python 來載入和執行基於掃描目錄中的檔案、http 請求(在基於扭曲的系統上)和 Zeromq 的模組。恕我直言,什麼是合適的取決於系統還需要什麼,我總是選擇有效且開銷最小的。您python-current必須進行適當的介面。

通常這與重新加載某些模組相結合(以處理新命令)。為此,您可以使用reload()內建的:

import mycommand
# test for a command that requires reloading
reload(mycommand)


順便說一句:特別是在使用 UI 程式碼時,我發現這種重新載入很有用。 Python 載入可執行檔與 Perl 相當(在我使用了幾年的系統上為 0.002 秒time python -v)。載入基本模組大約需要十倍的時間(time python -c "exit();", 0.025s). But when using UI based programs the whole startup easily grows to several seconds and more. And in that case implementing dynamic command reading and having apython-current` 是有道理的。

答案2

如果你使用bash你可以嘗試協程。克什也有協程,我不確定這兩個 shell 在這方面是否具有相同的功能。我只嘗試過 Ksh 版本(我的雇主喜歡 klunk,所以我們使用 Ksh)並且它有效,但是擁有多個協進程並不容易。

谷歌搜尋“ksh coprocess example”或“bash coprocess example”,您將找到範例程式碼。從範例開始工作,因為整件事並不是超級直觀。

相關內容