3

pGina が作成するエントリのレジストリを読み取るために ActivePython 2.5 を使用しています。具体的には、コンピュータで許可されている GID に関するエントリです。この情報は、pGina を使用して編集すると、コンピューターごとに定期的に変更される可能性があるため、Python スクリプトでこれらの値を毎回確認できるようにしたいと考えています。

簡単です。次の Windows コマンドは、その情報を取得します。

reg query HKLM\Software\pGina\ldapauth\

...Python で実行した場合を除いて、次のようになります。

>>> import subprocess
>>> command = 'reg query HKLM\Software\pGina\ldapauth'
>>> ldapauth = subprocess.Popen(command, shell=False, stdout=subprocess.PIPE).communicate()[0]
ERROR: The system was unable to find the specified registry key or value.

そのため、Python で 'reg query HKLM\Software' を実行すると、HKLM ではなくHK CU \Software の下にキーと値のリストが出力されます。

管理者として Python を実行しています (getpass.getuser() を使用して確認)。バッチ スクリプトから同じコマンドを実行すると、HKLM の下に正しいリストが表示されます。ただし、Python からバッチ スクリプトを呼び出すと、古い HKCU の結果に戻ります。

だから、私は少し立ち往生しています。誰にも洞察力がありますか?

編集: 後で詳しく説明するように、私は Windows 7 64 ビットを実行しており、OpenKey のオプションの 4 番目の「sam」引数を含む _winreg メソッドを試しました。

4

2 に答える 2

1

winregを使用します。(winreg.OpenKeyおよびwinreg.Query*)。はるかに高速で、シェル コマンドを実行する必要はありません。BINARY などのトリッキーなレジストリ値の型もすべてオブジェクト指向の方法で返します。

#import _winreg as winreg # the 'correct' idiom for importing
from _winreg import *

with OpenKey(HKEY_LOCAL_MACHINE,'Software\pGina\ldapauth') as key:
    ... do something with QueryValue(key[,...])

winreg は問題なく機能しますが、基盤となる Windows インターフェイスがそうであったため、インターフェイスはかなり風変わりです。特に、ルックアップ呼び出しのラッパーを書きたいと思うかもしれません。私のように、サブキーの再帰と列挙、キー名へのパターンマッチング、特定の許容されるレジストリ値への検索の制限などを取得するジェネレータを作成する場合など.

于 2011-08-15T23:55:24.867 に答える
0

そのため、私の場合、根本的な原因の解決策はまだ見つかりません。しかし、私はそれを回避することができます。ログインのたびに SYSTEM によって実行されるスクリプトは、問題のキーを簡単に解析できるテキスト ファイルにエクスポートします。

于 2011-08-18T20:57:58.083 に答える