2016-04-28 10 views
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 

終了を確認する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システム上で実行されるため、これは望ましくありません。誰かが私が間違っていることを理解できますか?

答えて

0

あなたはself._pipe_cmd_rcvを介して入力してプロセスを生み出してきたが、あなたはself._pipe_cmd_sndを経由して、そのプロセスへの入力を送信しようとしているので、入力のためにそこにブロックしています。以下は助けになるかもしれない。

self._pipe_cmd_rcv.send("exit \n") 
    self._pipe_cmd_rcv.send("Y \n") 
+0

パイプ宣言がタプルを返すため、これは機能しません。パイプの2つの端が必要です.1つは送信用、もう1つは受信用です。私はプロセスのスタンダードにコマンドを送信し、それを送信しないようにしたい – ITiger

関連する問題