それは問題が何であるかに依存します。環境を複製して変更する場合、1つの解決策は次のようになります。
subprocess.Popen(my_command, env=dict(os.environ, PATH="path"))
しかし、それは、置き換えられた変数が有効なpython識別子であることによって多少異なりますが、それらはほとんどの場合そうです(英数字+アンダースコアではない環境変数名、または数値で始まる変数にどれくらいの頻度で遭遇しますか?)。
それ以外の場合は、次のように記述できます。
subprocess.Popen(my_command, env=dict(os.environ,
**{"Not valid python name":"value"}))
非常に奇妙なケース(環境変数名で制御コードまたは非ASCII文字をどのくらいの頻度で使用しますか?)では、環境のキーは次のとおりです。 bytes
(python3では)その構造を使用することさえできません。
ここで使用されている手法(特に最初の手法)が環境のキーにメリットをもたらすことがわかるように、通常は有効なpython識別子であり、事前に(コーディング時に)わかっているため、2番目の手法には問題があります。そうでない場合は、おそらく別のアプローチを探す必要があります。
os.pathsep
プラットフォーム間で機能するパスには、「:」の代わりに使用することをお勧めします。stackoverflow.com/questions/1499019/…を