Автозагрузка Windows с файлом pyw не закрывает cmd
Я работал над небольшим сценарием, который должен запускаться на заднем плане моего компьютера. У меня уже работает скрипт, и все, кроме одной вещи, на которую часы поиска и поиска в Google не нашли ответа.
Файл имеет расширение.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, чтобы консоль могла закрыться до окончания файла)
Затем я сократил командный файл до одной строки:
pythonw.exe C:\Users\(my name)\Desktop\File.pyw
но это все равно не сработает. Когда запускается пакетный файл, я получаю открытое окно cmd с введенной командой, но оно работает как обычный файл.py, не закрывая окно cmd.
Может кто-нибудь помочь мне выяснить, почему консоль не закрывается, когда команда запускается из.batch-файла, а будет работать при запуске непосредственно из командной строки?
ОБНОВЛЕНИЕ:
Сценарий предназначен для добавления быстрого сочетания клавиш для закрытия задачи, в частности, 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(мое имя)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup, а затем попробуйте ничего не происходит Я предполагаю, что это потому, что Windows запускает файл и завершает его, прежде чем что-то случится, но я действительно не уверен. Мне просто очень нужно решение, которое заставляет его работать при запуске и вводить мой ключ до тех пор, пока я не выключусь.
2 ответа
Итак, мой последний подход состоял в том, чтобы просто связать файл VBS (как это было упомянуто в комментариях). Оказалось, что я делал неправильно и смешивал типы файлов, поэтому у меня были странные ошибки. Этот VBS-файл беззвучно назывался BAT-файлом, поэтому окно cmd не отображалось. Затем этот BAT-файл вызывал мою программу, которая по какой-то причине работала лучше при вызове из cmd, чем когда он был запущен на месте. Теперь он запускается при запуске, и окно cmd не появляется, так что это хорошее исправление, хотя и неэффективное.
Используйте команду windows start в вашем.cmd файле; удалить "выход".
Как это:
cd C:\Users\(my name)\Desktop
start pythonw File.pyw