2

Python で次のようなプログラムがあるとします ( first.py ):

GLOBALVAR = "pineapple"

def changeVAR(newValue):
     global GLOBALVAR
     GLOBALVAR = newValue

while(True):
   print GLOBALVAR

そして、最初のプログラムが実行されている間に、別の python プログラムでグローバル変数GLOBALVARを唱えたいと思います。たとえば ( second.py ):

from second import changeVAR

#do something
first.changeVAR("banana")

このようなことは可能ですか?つまり、実行中のプログラムのグローバル変数を別のプログラムで変更するには?

前もって感謝します!

4

3 に答える 3

5

あなたが説明すること(同じ変数を共有するプログラム)は、異なるプロセス間ではなく、異なるスレッド(同じpythonインタープリターとデータを共有する)間でのみ可能です。

最新のオペレーティング システムでは、プログラムが別のプログラムのメモリにアクセスすることはできません。したがって、別のプロセスのメモリに到達して、そこで何かを変更することはできません。それを許可すると、あらゆる種類のバグやセキュリティの問題が発生します。

プロセス間通信を使用して、別のプログラムと通信することができます。これは、たとえば、 socketsメモリ マップ ファイル、または互いの標準入出力への書き込みで実行できます。UNIX ライクなオペレーティング システムでは、セマフォ、共有メモリ、およびメッセージ キューもサポートされています。

このmultiprocessingモジュールは、関連する処理が互いに通信できるようにするQueueおよびオブジェクトを提供します。Pipe

于 2012-10-23T22:27:09.360 に答える
3

私が使用している回避策。どこかに空のファイルを作成することです。次に、1つのプログラム。このファイルが空の場合は、このファイルから読み取ることができます (たとえば、2 秒ごとなど)。もう一方は、必要に応じてこのファイルに書き込むことができます。WRITE の後、他のプログラムは書き込まれたデータをファイルから読み取り、これを新しい VAR として使用します。次に、ファイルをクリアして、新しい読み取りの準備をします。私はこれをファイルから読み取るサーバーで使用しており、別のプログラムからサーバーに「コマンド」(照明の音声制御に使用) を送信したり、照明のオン/オフなどを行うことができます!

于 2015-04-29T11:34:00.007 に答える
0

はい。ただし、これは動的な変更であるため、後でモジュールを再度静的にロードすると、変更は保持されません。ただし、変更後にモジュールを使用するときはいつでも、そのまま残ります。

first.GLOBALVAR = 'banana'同じ結果を得るために単純に呼び出すこともできます。

于 2012-10-23T22:13:42.323 に答える