こんにちは。
野中やすおです。
タイトルの通りですが、subprocess.Popenの返り値の型アノテーションがわからず、いろいろ調べてしまってやたら時間がかかってしまったので、メモがてら残しておきます。
subprocess.Popenを使ったコードサンプル
どういうことかと言いますと、下記の例のコードをご覧ください。
1 2 3 4 5 6 |
from subprocess import Popen cmd = ["ls", "la"] def process(cmd): p = Popen(cmd, shell=True, stdout=PIPE) return p |
このようにコマンドを引数としてprocess関数の中でPopenを実行し、Popenオブジェクトを返すというシンプルなコードなのですが、mypyで型アノテーションを明示するように設定している場合は、もちろんエラーになってしまいます。
この場合、適当に型ヒントを設定して、カーソルをエラー部分に当てるとmypyは返り値はPopen[str]になっているよと教えてくれるのですが、こちらを設定してこの関数を実行するとTypeErrorになってしまいます。
実際は単純にPopenを設定すればいいだけです。これでTypeErrorは出なくなります。これでAnyを使わなくてすみますね!
1 |