PythonでOS環境変数を読み出すことは、ケーキの一部です。 Windowsで'PATH'
変数を読み出すために、次の3つのコード行を試してみてください:*新しい* OS環境変数をPythonでどのように読み込むのですか?
#################
# PYTHON 3.5 #
#################
>> import os
>> pathVar = os.getenv('Path')
>> print(pathVar)
C:\Anaconda3\Library\bin;C:\Anaconda3\Library\bin;
C:\WINDOWS\system32;C:\Anaconda3\Scripts;C:\Apps\SysGCC\arm-eabi\bin;
...
今'PATH'
変数の小さな変化を加えます。
Control Panel >> System and Security >> System >> Advanced system settings >> Environment variables
同じコードをPythonで実行すると、変更は表示されません。 Pythonセッションを開始した端末を閉じる必要があります。再起動してコードを再実行すると、変更が表示されます。
すぐに変更を確認する方法はありますか?Pythonを閉じる必要はありませんか?これは私が構築しているアプリケーションにとって重要です。
は
EDIT :-)どうもありがとうございます。そのリンクに記載された多くのオプションがあります Is there a command to refresh environment variables from the command prompt in Windows?
:
マルタインピータース私に次のリンクを示しました。
REM --------------------------------------------
REM | refreshEnv.bat |
REM --------------------------------------------
@ECHO OFF
REM Source found on https://github.com/DieterDePaepe/windows-scripts
REM Please share any improvements made!
REM Code inspired by https://stackoverflow.com/questions/171588/is-there-a-command-to-refresh-environment-variables-from-the-command-prompt-in-w
IF [%1]==[/?] GOTO :help
IF [%1]==[/help] GOTO :help
IF [%1]==[--help] GOTO :help
IF [%1]==[] GOTO :main
ECHO Unknown command: %1
EXIT /b 1
:help
ECHO Refresh the environment variables in the console.
ECHO.
ECHO refreshEnv Refresh all environment variables.
ECHO refreshEnv /? Display this help.
GOTO :EOF
:main
REM Because the environment variables may refer to other variables, we need a 2-step approach.
REM One option is to use delayed variable evaluation, but this forces use of SETLOCAL and
REM may pose problems for files with an '!' in the name.
REM The option used here is to create a temporary batch file that will define all the variables.
REM Check to make sure we dont overwrite an actual file.
IF EXIST %TEMP%\__refreshEnvironment.bat (
ECHO Environment refresh failed!
ECHO.
ECHO This script uses a temporary file "%TEMP%\__refreshEnvironment.bat", which already exists. The script was aborted in order to prevent accidental data loss. Delete this file to enable this script.
EXIT /b 1
)
REM Read the system environment variables from the registry.
FOR /F "usebackq tokens=1,2,* skip=2" %%I IN (`REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"`) DO (
REM /I -> ignore casing, since PATH may also be called Path
IF /I NOT [%%I]==[PATH] (
ECHO SET %%I=%%K>>%TEMP%\__refreshEnvironment.bat
)
)
REM Read the user environment variables from the registry.
FOR /F "usebackq tokens=1,2,* skip=2" %%I IN (`REG QUERY HKCU\Environment`) DO (
REM /I -> ignore casing, since PATH may also be called Path
IF /I NOT [%%I]==[PATH] (
ECHO SET %%I=%%K>>%TEMP%\__refreshEnvironment.bat
)
)
REM PATH is a special variable: it is automatically merged based on the values in the
REM system and user variables.
REM Read the PATH variable from the system and user environment variables.
FOR /F "usebackq tokens=1,2,* skip=2" %%I IN (`REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PATH`) DO (
ECHO SET PATH=%%K>>%TEMP%\__refreshEnvironment.bat
)
FOR /F "usebackq tokens=1,2,* skip=2" %%I IN (`REG QUERY HKCU\Environment /v PATH`) DO (
ECHO SET PATH=%%PATH%%;%%K>>%TEMP%\__refreshEnvironment.bat
)
REM Load the variable definitions from our temporary file.
CALL %TEMP%\__refreshEnvironment.bat
REM Clean up after ourselves.
DEL /Q %TEMP%\__refreshEnvironment.bat
ECHO Environment successfully refreshed.
このソリューションは、私のコンピュータ(64ビット版のWindows 10)で動作します(それだけでバッチファイル、余分な依存関係であるため)私は、次のいずれかを選択しました。環境変数が更新されます。ただし、次のエラーが表示されます。
ERROR: The system was unable to find the specified registry key or value.
不思議ですが、変数が更新されます。
編集:私はターミナルウィンドウに直接バッチファイル'refreshEnv'
を呼び出すときに
環境変数が更新されます。しかし、Pythonプログラムから呼び出すとうまくいきません。
#################################
# PYTHON 3.5 #
# ------------------------- #
# Refresh Environment variables #
#################################
def refresh(self):
p = Popen(self.homeCntr.myState.getProjectFolder() + "\\refreshEnv.bat", cwd=r"{0}".format(str(self.homeCntr.myState.getProjectFolder())))
###
なぜですか? Popenはバッチファイルを別のcmd端末で実行しているので、現在のPythonプロセスには影響しませんか?
まもなく:できません。環境変数は、開始時にプロセスに設定され、更新されません。これはPythonに限定されません。 –
これはLinuxの場合は[別のプロセスの環境変数を変更する方法はありますか?](http://stackoverflow.com/q/205064)ですが、Windowsにも同じ制限が適用されます。 –
[Windowsのコマンドプロンプトから環境変数を更新するコマンドはありますか?](http://stackoverflow.com/q/171588)環境変数とプロセスメモリについて説明しているように、 –