私はWindowsを使用しています。setup.py
次のシナリオを可能にするPython 2.x スクリプト (と呼びましょう) を作成しようとしています。
- ユーザーが cmd を実行してコンソール ウィンドウを開く
- そのコンソールウィンドウで、ユーザーは実行します
setup.py
- ユーザーは同じコンソール ウィンドウで自分自身を見つけますが、そこで実行されている cmd の環境 (env. 変数) が変更されています。
setup.py
setup.py
FOO
valueで新しい環境変数を追加し、foo
何かを前に付けて、環境を変更しますPATH
。
Linux ではos.exec*e
、Python プロセスを環境が構成されたシェルに置き換えるだけです。
Windowsで同じアプローチを試みましたが(のようにos.exec*e(os.environ['ComSpec'])
)、うまくいきません。新しく実行されたcmdの環境は次のようにめちゃくちゃです:
実行すると
set
リストFOO
に表示されず、効果が表示されませんPATH
。set FOO
ただし、実行すると、が表示FOO=foo
され、echo %FOO%
エコーが発生しfoo
ます。変更された変数を実行
set PATH
または表示します。値を変更せずに実行または表示します(環境変数は通常、Windows では大文字と小文字が区別されません)。echo %PATH%
PATH
set path
echo %path%
と入力
exit
すると、 を押すまで、コンソールは入力を受け付けない状態でハングしたままになりCtrl+C
ます。cmd
その後、元の に戻るようsetup.py
です。
明らかに、os.exec*e
Windows のこのシナリオでは機能しません。私が望むものを達成する別の方法はありますか? subprocess.Popen()
呼び出し元の Python プロセスを終了し、理想的には同じコンソールで、呼び出された cmd の実行を終了できるようにするフラグの組み合わせはありますか? または、ヘルプからアクセスCreateProcess
しctypes
ますか?
必要に応じて、新しいコンソール ウィンドウを起動して古いコンソール ウィンドウを閉じることで解決できますが、新しく作成したコンソール ウィンドウが閉じるのを待って、古いコンソール ウィンドウをフリーズしたままにしておく余裕はありません。