2016-05-25 14 views
3

ここに私が達成したいことがあります: 私は、Windowsの環境変数でPATHに新しいディレクトリを追加する必要があるPythonベースのソフトウェアをコーディングしています。そのためには、最初にパスを取得して文字列を変更し、最後にSETXを使用して新しいPATHを更新します。レジストリにアクセスしないで環境変数でユーザーパスのみを返す方法はありますか?

私の問題点: PATH(pythonまたはcmd)を取得するのに3つの方法を試しましたが、それらはすべてUSER PATHとSYSTEM PATHの組み合わせを返します。 3つの方法がある:

os.environ['PATH'] 
os.system('echo %PATH%') 
os.system('set PATH') 

これは新しいユーザーPATHが長すぎると、1024文字(マイクロソフトによって制限)に切り捨てられていることになるので、私は、ユーザーのパスとシステムパスの組み合わせを受け入れることができません。私はまったく同じ問題を持った投稿を読んだ。この問題は、レジストリを使用して解決されるようです:http://stackoverflow.com/questions/13359082/windows-batch-select-only-user-variables。この解決策では、ユーザ変数とシステム変数が分離されているレジストリにアクセスするために、

reg query HKCU\Environment /v PATH 

を使用することをお勧めします。 しかし、解決策は私のためには機能しません。私はそれをcommend行で実行すると、 "アクセスが拒否されました"というメッセージが返されます。 その結果、レジストリにアクセスすることなく環境変数でユーザーパスのみを返すメソッドを探しています。ありがとうございました。

+0

拡張され連結された '%PATH%'をレジストリのユーザの 'PATH'値に格納することは、古いバージョンの長さの制限にかかわらず間違っています。 – eryksun

+0

「HKCU \ Environment」へのアクセスが拒否された理由は考えられません。これは、ユーザープロファイルntuser.datに格納されているユーザーのレジストリハイブにあります。エラーが 'PATH'という名前の値を見つけることができないということではないのですか?ユーザーの値が存在しないのは正常です。新しい値を作成するだけです。 – eryksun

+0

eryksun、私はあなたに同意します。ユーザーパスに%PATH%を格納するのはまったく間違っています。そして、はい、アクセスレジストリのエラーメッセージに「アクセスが拒否されました」と表示されます。私は協力しているコンピュータを使用しています。それが理由です。誰かが私に問題の解決方法に関する情報を提供できるのであれば、私は感謝します。 –

答えて

2
import _winreg 
import unicodedata 
keyQ = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, 'Environment', 0, _winreg.KEY_QUERY_VALUE) 
path_old, _ = _winreg.QueryValueEx(keyQ, "PATH") 
#the result is unicode, need to be converted 
unicodedata.normalize('NFKD', path_old).encode('ascii','ignore') 

私はレジストリにアクセスせずに回答したいと言いましたが、これがユーザ環境変数「PATH」を取得する唯一の方法であることがわかりました。みんなありがとう。

関連する問題