Как я могу остановить выполнение программы с помощью python?

Я использую программу (в Windows), имя которой я не буду раскрывать, которая может быть открыта из командной строки без прохождения какой-либо проверки подлинности. Я пытаюсь создать некоторую систему безопасности, чтобы другие пользователи не обращались к ней так.

Я планирую заменить встроенный двоичный файл для этой программы пакетным файлом с первой строкой, которая указывает на мою собственную систему аутентификации (реализована в python, скомпилирована в .exe с py2exe), а вторая строка – команде, которая открывает программа.

Мой первоначальный план состоял в том, чтобы мой скрипт (auth.py) остановил командный файл от выполнения второй строки, если аутентификация завершилась неудачей с чем-то вроде этого:

if not authenticated: print('Authentication failed') sys.exit(1) else: print('Successfully authenticated!') 

Я рассчитывал на sys.exit (1), чтобы сделать это, и я не стал тестировать его, пока не закончил разработку скрипта. Теперь я понимаю, что sys.exit только выходит из процесса python.

Мне либо нужен способ остановить пакетный процесс из сценария python, либо способ для пакета определить код выхода из auth.py (1, если не удалось, 0 если он был пройден) и выполнить другую программу, только если код выхода 0 оттуда.

Если бы кто-нибудь мог дать мне какие-либо предложения или помощь, я бы очень признателен. Благодаря!

Используйте subprocess для вызова программы при успешной аутентификации. Таким образом, ваш скрипт python запускает программу, а не пакетный.

 if not authenticated: print('Authentication failed') sys.exit(1) else: print('Successfully authenticated!') proc = subprocess.Popen([program]) 

Обратите внимание: если у пользователя есть разрешение на запуск программы из сценария python или batch, ничто не мешает им напрямую обращаться к нему. Это не позволит никому не обращаться к программе; за исключением, может быть, крайней нетехнической.

Вы могли бы сделать что-то действительно сложное, чтобы попытаться найти родительский PID процесса Python и убить его, или вы можете просто проверить %ERRORLEVEL% в вашем пакетном файле. Что-то вроде:

 python auth.py if %ERRORLEVEL% neq 0 exit /B 1 

Я обнаружил, что эти два метода надеются, что это может помочь
http://metazin.wordpress.com/2008/08/09/how-to-kill-a-process-in-windows-using-python/
http://code.activestate.com/recipes/347462-terminating-a-subprocess-on-windows/