26

私が読んだことによると、Python インスタンスの環境変数への変更は、そのインスタンス内でのみ利用可能であり、インスタンスが閉じられると消えます。それらをシステムにコミットすることでそれらを固執させる方法はありますか?

これを行う必要がある理由は、私が働いているスタジオでは、Maya などのツールが環境変数に大きく依存して、複数のプラットフォーム間でパスを構成するためです。

私のテストコードは

import os
os.environ['FAKE'] = 'C:\\'

Python の別のインスタンスを開いて要求os.environ['FAKE']すると、KeyError.

注:移植性は問題になりますが、私が書いている小さな API は、OS のバージョンをチェックし、必要に応じてさまざまなコマンドをトリガーすることができます。

そうは言っても、私は Windows レジストリ手法を使用するルートをたどり、他のプラットフォームでシェル スクリプトが必要になったときに呼び出す代替メソッドを単純に記述します。

4

12 に答える 12

18

コマンドラインで SETX を使用できます。

デフォルトでは、これらのアクションは USER 環境変数に適用されます。SYSTEM 変数を設定および変更するには、/M フラグを使用します。

import os
env_var = "BUILD_NUMBER"
env_val = "3.1.3.3.7"
os.system("SETX {0} {1} /M".format(env_var,env_val))
于 2013-08-16T22:35:26.800 に答える
11

それらをシステムにコミットすることによってそれらを固執させますか?

ここで少し混乱していると思います。「システム」環境はありません。各プロセスには、メモリの一部として独自の環境があります。プロセスは、それ自体の環境のみを変更できます。プロセスは、作成するプロセスの初期環境を設定できます。

システムの環境変数を設定する必要があると本当に思う場合は、WindowsのレジストリやLinuxのシェル構成ファイルなど、最初にロードされた場所でそれらを変更することを検討する必要があります。

于 2009-01-28T18:16:58.033 に答える
6

Windows では、やり過ぎのように思えますが、このレシピを使用してレジストリを介して永続的な環境変数に変更を加えることができます。

ブライアンの質問と同じように、何を達成しようとしていますか? おそらくもっと簡単な方法があります。

于 2009-01-28T17:09:48.763 に答える
5

I don't believe you can do this; there are two work-arounds I can think of.

  1. The os.putenv function sets the environment for processes you start with, i.e. os.system, popen, etc. Depending on what you're trying to do, perhaps you could have one master Python instance that sets the variable, and then spawns new instances.

  2. You could run a shell script or batch file to set it for you, but that becomes much less portable. See this article:

http://code.activestate.com/recipes/159462/

于 2009-01-28T16:48:48.493 に答える
3

このように考えてみてください。

シェル環境変数を設定していません。

特定の環境変数設定でサブシェルを生成しています。このサブシェルは、変更された環境でアプリケーションを実行します。

于 2009-01-29T02:57:14.910 に答える
2

この議論によると、それはできません。何を達成しようとしていますか?

于 2009-01-28T16:46:09.730 に答える
2

新しいプロセスをフォークしていて、シェルから新しいシェル プロセスを開始する場合とは異なり、親プロセスの環境を変更することはできません。

于 2009-01-28T16:46:48.417 に答える
1

ActivePythonに含まれている(または個別にインストールできる) 、Mark Hammond によって開発されたPython Win32 Extensionsを試してみてください。Hammond と Robinson の本で、Windows 関連の多くのタスクを実行する方法を学ぶことができます。

PyWin32を使用して Windows COM オブジェクトにアクセスすると、Python プログラムはオブジェクトの環境プロパティ(環境変数のコレクション) を使用できWScript.Shellます。

于 2009-01-28T19:05:00.357 に答える
-1

Python内から?いいえ、できません!

Python に縛られていない場合は、シェル スクリプト (sh、bash など) の使用を検討する必要があります。「ソース」コマンドを使用すると、環境を変更するスクリプトを実行でき、スクリプトを「ソース」したシェルに好きなように「固執」します。ここで起こっていることは、シェルがサブを作成するのではなく、スクリプトを直接実行することです。 -スクリプトを実行するプロセス。

これは非常に移植性が高く、Windows で cygwin を使用してこれを行うことができます。

于 2009-01-29T03:38:25.967 に答える
-1

誰かがこの情報を必要とする場合に備えて。これは7年前に尋ねられたことに気づきましたが、時々忘れてしまいます。.

はい、それらをウィンドウに「くっつける」方法があります。コントロール パネル、システム、システムの詳細設定に移動するだけで、システム プロパティ ウィンドウが開くと、環境変数のオプション (ボタン) が表示されます。.これに到達するプロセスは、使用している OS によって少し異なります (ググってください)。

それを選択 (ボタンをクリック) すると、[環境変数] ウィンドウが開きます。2 つの分割ウィンドウがあり、一番上のウィンドウは「ユーザー名のユーザー変数」である必要があります。. .「new」を選択し、変数を設定するだけです。たとえば、私のものは「Database_Password = mypassword」です。

次に、アプリで次のようにアクセスできます: import os, os.environ.get('Database_Password')。のようなことができますpass = os.environ.get('Database_Password')

于 2016-07-17T08:45:49.613 に答える