teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2021/12/06 08:22

投稿

otn
otn

スコア86362

answer CHANGED
@@ -3,4 +3,28 @@
3
3
 
4
4
  システムの設定を変更したいのなら、`setx`コマンドを使います。これはレジストリ含めシステムの設定を変更するコマンドなので、GUIの環境設定変更画面で設定したのと同じです。
5
5
  それ以降に新規に生成したプロセスから有効です。
6
- [setx | Microsoft Docs](https://docs.microsoft.com/ja-jp/windows-server/administration/windows-commands/setx)
6
+ [setx | Microsoft Docs](https://docs.microsoft.com/ja-jp/windows-server/administration/windows-commands/setx)
7
+
8
+ #補足の追記
9
+ > それ以降に新規に生成したプロセスから有効です。
10
+
11
+ 正確には、それ以降にWindows本体やExplorerから新規に生成したプロセスから有効です。
12
+ `setx`やGUIで変更する以前に起動されていたプロセスから、新規に子プロセスを起動した場合には、影響しませんので、
13
+ ```Python
14
+ import subprocess
15
+ subprocess.run('set FOO', shell=True) # 未定義
16
+ subprocess.run('setx FOO 123', shell=True) # ここでシステム変更するが
17
+ # 起動元のPythonプロセスには反映されないのでそこから起動しても反映されない
18
+ subprocess.run('set FOO', shell=True) # 未定義
19
+ ```
20
+ となります。
21
+
22
+ Pythonから起動するプロセスの環境変数を変更したいなら、
23
+ ```Python
24
+ import subprocess
25
+ import os
26
+ subprocess.run('set FOO', shell=True) # 未定義
27
+ os.environ["FOO"]="123"
28
+ subprocess.run('set FOO', shell=True) # FOO=123 が定義されている
29
+ ```
30
+ のようにPythonプロセスの環境変数を変更します。