私はモバイルデバイスで自動煙とユニットテストのための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
終了を確認するY
続い私はLLDBにexit
コマンドを送信する部分、:
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)
私の私ntentionはexit
コマンドをLLDBを実行しているプロセスの標準入力に送信することですが、残念ながらテストプロセス全体が終了した後は、私はもうターミナルを使用できません。私はCTRL +Cを入力した場合には、プロンプトを返し、私はエンターキーを押したときに、それは、入力としてプロンプトを貼り付けます。それはループのように詰まっているようです。私はそれを "通常の方法"を使用するために新しいターミナルウィンドウを開く必要があります。また、このスクリプトはCIシステム上で実行されるため、これは望ましくありません。誰かが私が間違っていることを理解できますか?
パイプ宣言がタプルを返すため、これは機能しません。パイプの2つの端が必要です.1つは送信用、もう1つは受信用です。私はプロセスのスタンダードにコマンドを送信し、それを送信しないようにしたい – ITiger