私は、コンピューターのバックグラウンドで実行される小さなスクリプトに取り組んでいます。私はすでにスクリプトを動作させており、何時間ものグーグル検索とハンティングで答えが見つからなかった1つのことを除いて、すべてが機能しています。
ファイルの拡張子は .pyw で、コマンド プロンプトから実行すると、次のようになります。
pythonw File.pyw
cmd ウィンドウは続行し、通常の .py ファイルの場合のようにアイドル状態で起動することなく、別のプロンプトが表示されます。
ファイルをダブルクリックすると、cmd ウィンドウが問題なく開閉します。これは私にとって完璧です。
ただし、小さなバッチ ファイルを作成しようとしました。
cd C:\Users\(my name)\Desktop
pythonw File.pyw
そして、それをWindowsのスタートアップフォルダーに貼り付けました。ただし、コンピューターを再起動して動作するかどうかを確認すると、cmd ウィンドウは開きましたが、閉じませんでした。理由がわかりません。File.pyw をスタートアップ フォルダーに直接貼り付けたり、次のようにバッチ ファイルに終了コマンドを入れようとするなど、考えられるすべてのことを試しました。
cd C:\Users\(my name)\Desktop
pythonw File.pyw
exit
しかし、おそらくご想像のとおり、それは失敗しました。コマンドをコードに直接入れてみたので、最後の直前に次の行がありました
os.system("exit")
しかし、これが機能しないことに気付いた後、私はそれを取り出しました。(重要な詳細: コードの最後の行は、プログラムが閉じるまでループするように設定されています。そのため、ファイルが終了する前にコンソールを閉じることができるように、pyw 拡張子を使用しようとしています)
次に、バッチ ファイルを 1 行だけに短縮しました。
pythonw.exe C:\Users\(my name)\Desktop\File.pyw
それでもうまくいきません。バッチ ファイルを実行すると、コマンドが入力された状態で cmd ウィンドウが開きますが、コマンド ウィンドウを閉じずに、通常の .py ファイルのように実行されます。
コマンドを .batch ファイルから実行するとコンソールが閉じないのに、コマンド プロンプトから直接実行するとコンソールが閉じる理由を誰かが教えてくれますか?
更新:
このスクリプトは、「+」をすばやく 2 回押したときに、タスク、特に Google Chrome を閉じるためのクイック キーボード ショートカットを追加することを目的としています。これが私の完全なコードです(個人情報を除いたもの)
import os
import sys
import pyHook, pythoncom
setting key to be '+' to avoid accidental usage.
def OnKeyBoardEvent(event):
global prevPlus, escPushed
if event.Ascii == 43:
if prevPlus == None:
prevPlus = event.Time
else:
if event.Time - prevPlus <= 1000:
os.system("taskkill /IM chrome.exe")
prevPlus = event.Time
else:
prevPlus = event.Time
elif event.Ascii == 27:
if escPushed == None:
escPushed = event.Time
else:
if event.Time - escPushed <= 1000:
sys.exit()
else:
escPushed = event.Time
getter = pyHook.HookManager()
getter.KeyDown = OnKeyBoardEvent
getter.HookKeyboard()
prevPlus = None
escPushed = None
pythoncom.PumpMessages()
これは、pycharmまたはcmdから実行している場合はすべて完全に機能しますが、 C:\Users(my name)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup に配置してから試してくださいアウト、何も起こりません。Windowsがファイルを実行し、何かが起こる前に終了するためだと思いますが、よくわかりません。起動時に実行し、シャットダウンするまでキー入力を取得するソリューションが本当に必要です。