前提・実現したいこと
Pythonのsubprocessモジュールを用いてコマンドを実行したいのですが要求通りに動かす事ができません。具体的には以下の通りです。
発生している問題
プログラムAを動作させる際にはソフトウェアBが立ち上がっている必要がある。
またプログラムAの起動にはソフトウェアBが起動時に出力する情報が必要である。
その為、これらをプログラムCを用いてまとめて起動できる様にしようとしたがプログラムCで問題が発生した。
subprocess.PopenでソフトウェアBを実行したがsubprocess.Popenは実行結果がコマンド終了後にしか取得できない為、ソフトウェアB起動時の情報を取得できず、また終了すれば情報を取得出来るが、今度はプログラムAを実行できない為、意味が無く、今回は使えなかった。
また実行時に逐次結果を出力出来るsubprocess.check_outputも試したがこちらは同期処理でコマンド終了まで次の処理が実行できない為、プログラムAを実行出来ず、今回は使えなかった。
この様な使い方はsubprocessモジュールでは無理なのでしょうか?
その場合、無駄な感じがしてあまり使いたく無いのですがprocessモジュールを使ってプロセスを分けるしかないのでしょうか?
該当のソースコード
Python3.7
1import subprocess 2from subprocess import PIPE 3import time 4import sys 5 6import mains 7 8socat = subprocess.Popen("hogehoge", shell=True, stdout=PIPE, stderr=PIPE, text=True) 9# socat = subprocess.check_output("hogehoge", shell=True) 10time.sleep(1) 11msg = socat.stdout.readreadline() 12print(msg) 13split_data = msg.split() 14socat_port = split_data[6] 15 16mains.main(socat_port) 17 18socat.kill()
試したこと
発生している問題に書いた通りです。
補足情報(FW/ツールのバージョンなど)
実行環境
RaspberryPi3
Python3.7.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/24 07:41
2020/12/24 07:44
2020/12/24 07:47
2020/12/24 07:48
2020/12/24 07:49
2020/12/24 08:01
2020/12/24 08:14
2020/12/24 09:00
2020/12/24 10:47
2020/12/25 09:17
2020/12/25 12:46
2020/12/25 13:13
2020/12/25 14:09
2020/12/26 15:10