読者です 読者をやめる 読者になる 読者になる

Pythonスクリプトから管理者権限が必要なコマンドを実行する

python

Windows 7(多分Vistaも)で、Pythonからregeditなどの管理者権限が必要なコマンドを
os.systemやos.popen
subprocess.Popen/call/check_callをshell=Trueで呼び出した場合は,
自動的にUACのプロンプトが表示されます。

>>> subprocess.check_call("regedit", shell=True) # os.sytem("regedit")


しかし, subprocess.Popen/call/check_callを、shell引数を指定しないか、shell=Falseで呼び出すと、UACは出ず、単にエラーとなります。

>>> subprocess.check_call(["regedit"])
Traceback (most recent call last):
(中略)
WindowsError: [Error 740] 要求された操作には管理者特権が必要です。


subprocess.Popen/call/check_callのshell引数は、

http://www.python.jp/doc/release/library/subprocess.html

Windows で shell=True を有効にする必要があるのは dir や copy などのシェル組み込みのコマンドを使いたい場合だけです。バッチファイルを実行するときも、コンソールベースで起動するときも、 shell=True にする必要はありません。

shell が True の場合、指定されたコマンドはシェルを介して実行されます。

ということで、UACPythonが表示しているというより、コマンドを渡した先のシェル(コマンドプロンプト)が表示していると思われます。