概要
タイトルの通り Popen を使って結果を cummnicate() で取得する場合のサンプルを紹介します
環境
- macOS 11.4
- Python 3.8.3
サンプルコード
- vim test_user.py
import pytest
import subprocess
from user.user import User
class DummyProcess():
def __init__(self):
self.returncode = 0
def communicate(self):
return "hello", None
class TestUser():
def test_subprocess(self, monkeypatch):
monkeypatch.setattr(subprocess, "Popen", lambda args, stdout: DummyProcess())
u = User("hawk", 10)
ret = u.execute_command()
assert(ret == "hello")
- vim user.py
import subprocess
class User():
def __init__(self, name, age):
self.name = name
self.age = age
def execute_command(self):
process = subprocess.Popen(["ls"], stdout=subprocess.PIPE)
stdoutdata, _ = process.communicate()
return stdoutdata
ポイント
Popen のリターンとして DummyProcess を返すのがポイントです この DummyProcess クラスに communicate() を実装することで実際にコマンドを実行した結果ではなくダミーの結果を返すことができるようになります
0 件のコメント:
コメントを投稿