【Python】subprocess.Popenの返り値で型アノテーションにハマったのでメモとして残しておく

  • 2022年2月11日
  • 2023年5月18日
  • python

こんにちは。

野中やすおです。

タイトルの通りですが、subprocess.Popenの返り値の型アノテーションがわからず、いろいろ調べてしまってやたら時間がかかってしまったので、メモがてら残しておきます。

subprocess.Popenを使ったコードサンプル

どういうことかと言いますと、下記の例のコードをご覧ください。

このようにコマンドを引数としてprocess関数の中でPopenを実行し、Popenオブジェクトを返すというシンプルなコードなのですが、mypyで型アノテーションを明示するように設定している場合は、もちろんエラーになってしまいます。

この場合、適当に型ヒントを設定して、カーソルをエラー部分に当てるとmypyは返り値はPopen[str]になっているよと教えてくれるのですが、こちらを設定してこの関数を実行するとTypeErrorになってしまいます。

実際は単純にPopenを設定すればいいだけです。これでTypeErrorは出なくなります。これでAnyを使わなくてすみますね