私はPython最終的にコンピューターをシャットダウンするスクリプトを書きました。
この行はその一部です:
_os.system("shutdown /p")
_
何らかのシャットダウンを行いますが、オンになっているWindowsコントロールパネル(ユーザーがコンピューターユーザーを切り替えることができる)に残ります。
コンピューターを完全にシャットダウンする方法はありますか?
他のos.system("shutdown ___")
メソッドを試しましたが成功しませんでした。
他に役立つ方法はありますか?
import os
os.system('shutdown -s')
これはあなたのために働くでしょう。
Linuxの場合:
import os
os.system('Sudo shutdown now')
または:Sudo
パスワードなしの即時シャットダウンが必要な場合は、Ubuntuおよび同様のディストリビューションに以下を使用します。
os.system('systemctl poweroff')
問題なく本当に機能する唯一のバリアントは次のとおりです。
import os
os.system('shutdown /p /f')
ctypes を使用すると、 ExitWindowsEx 関数を使用してコンピューターをシャットダウンできます。
MSDNの説明:
対話ユーザーをログオフするか、システムをシャットダウンするか、システムをシャットダウンして再起動します。
最初のいくつかのコード:
_import ctypes
user32 = ctypes.WinDLL('user32')
user32.ExitWindowsEx(0x00000008, 0x00000000)
_
説明を1行ずつ:
ExitWindowsEx
は_user32.dll
_によって提供され、WinDLL()
を介してロードする必要がありますExitWindowsEx()
関数を呼び出して、必要なパラメーターを渡します。パラメータ:
引数はすべて16進数です。
選択した最初の引数:
システムをシャットダウンし、電源をオフにします。システムは電源オフ機能をサポートする必要があります。
他の多くの可能な関数があり、完全なリストについては ドキュメント を参照してください。
2番目の引数:
2番目の引数mustは、システムによってログに記録されるシャットダウンの理由を示します。この場合、_Other issue
_に設定しますが、多くの選択肢があります。完全なリストについては、 this を参照してください。
クロスプラットフォームにする:
これを他の方法と組み合わせて、クロスプラットフォームにすることができます。例えば:
_import sys
if sys.platform == 'win32':
import ctypes
user32 = ctypes.WinDLL('user32')
user32.ExitWindowsEx(0x00000008, 0x00000000)
else:
import os
os.system('Sudo shutdown now')
_
これはWindows依存の関数ですが(Linux/Macには同等のものがありますが)、os.system()
を呼び出すよりも優れたソリューションです。_shutdown.bat
_というバッチスクリプトはコマンドと競合する(そしてその間にセキュリティ上の危険を引き起こす)。
さらに、_"You are about to be signed out in less than a minute"
_のように_shutdown -s
_というメッセージでユーザーを煩わせることはありませんが、サイレントに実行します。
サイドノートとして subprocess over os.system()
を使用します( subprocess.Popenとos.systemの違い を参照)
サイドノートとして:私はこれを少し単純化した WinUtils (Windowsのみ)を構築しましたが、より高速でなければなりません(そしてCで構築されているため、Ctypesは不要です).
例:
_import WinUtils
WinUtils.Shutdown(WinUtils.SHTDN_REASON_MINOR_OTHER)
_
このPythonコードは、次のことを行います。
import os
os.system('Sudo shutdown -h now')