1
我正在研究用於在移動設備上進行自動化煙霧和單元測試的Python腳本。 iOS解決方案使用ios-deploy。因爲我在終止測試過程之前嘗試終止LLDB會話,所以我使用管道進行過程之間的通信。下面是一段代碼:Python:子進程通信失敗和終端崩潰
管道聲明:
_pipe_cmd_rcv, _pipe_cmd_snd = Pipe()
# Pipe to receive commands
self._pipe_cmd_rcv = _pipe_cmd_rcv
# Pipe to send commands
self._pipe_cmd_snd = _pipe_cmd_snd
,我送exit
命令LLDB,隨後Y
確認退出的部分:
self._pipe_cmd_snd.send("exit \n")
self._pipe_cmd_snd.send("Y \n")
最後我想要接收輸入的部分:
pcs = subprocess.Popen(cmd.split(), stdin=self._pipe_cmd_rcv, stdout=subprocess.PIPE, universal_newlines=True)
我的我注意將exit
命令發送到運行LLDB的進程的stdin,但不幸的是,在整個測試過程完成後,我不能再使用我的終端。如果我輸入CTRL + C它會返回提示,並且當我按下回車鍵時,它將提示粘貼爲輸入。這就像它被困在一個循環中。我必須打開一個新的終端窗口才能以「常規方式」使用它。這是不希望的,因爲該腳本將用於在CI系統上運行。任何人都可以弄清楚我做錯了什麼?
這不起作用,因爲管道聲明會返回一個元組。你需要一個管道的兩端,一個用於發送,另一個用於接收。我想發送一個命令給進程的標準輸入,而不是從它發送 – ITiger