如何使用python停止程序的执行?

如何使用python停止程序的执行?,python,batch-file,exit-code,Python,Batch File,Exit Code,我在Windows上使用了一个程序,我不会透露它的名称,它可以从命令行打开,而无需经过任何身份验证。我正在尝试创建一些安全性,以防止其他人以这种方式访问它 我计划用批处理文件替换这个程序的内置二进制文件,第一行指向我自己用python实现的身份验证系统,用py2exe编译为.exe,第二行指向打开程序的命令 我最初的计划是,如果身份验证失败,让脚本auth.py停止批处理文件执行第二行,如下所示: if not authenticated: print('Authentication f

我在Windows上使用了一个程序,我不会透露它的名称,它可以从命令行打开,而无需经过任何身份验证。我正在尝试创建一些安全性,以防止其他人以这种方式访问它

我计划用批处理文件替换这个程序的内置二进制文件,第一行指向我自己用python实现的身份验证系统,用py2exe编译为.exe,第二行指向打开程序的命令

我最初的计划是,如果身份验证失败,让脚本auth.py停止批处理文件执行第二行,如下所示:

if not authenticated:
    print('Authentication failed')
    sys.exit(1)
else:
    print('Successfully authenticated!')
我曾指望sys.exit1来完成这项工作,在完成脚本开发之前,我没有费心测试它。现在我意识到sys.exit只退出python进程

我需要一种方法从python脚本停止批处理过程,或者一种方法让批处理检测auth.py 1中的退出代码(如果失败),如果通过,则检测0,并且仅当退出代码为0时才执行另一个程序

如果有人能给我任何建议或帮助,我将不胜感激。
谢谢

您可以做一些非常复杂的事情来尝试找到Python进程的父PID并终止它,或者您可以只检查批处理文件中的%ERRORLEVEL%。比如:

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

您可以做一些非常复杂的事情来尝试找到Python进程的父PID并终止它,或者您可以只检查批处理文件中的%ERRORLEVEL%。比如:

python auth.py
if %ERRORLEVEL% neq 0 exit /B 1
使用子进程在成功身份验证时调用程序。因此,python脚本将启动程序,而不是批处理文件

if not authenticated:
    print('Authentication failed')
    sys.exit(1)
else:
    print('Successfully authenticated!')
    proc = subprocess.Popen([program])
请注意,如果用户有权从python或批处理脚本中启动程序,则没有任何东西可以阻止他们直接访问它。这将阻止任何人访问该程序;保存可能是极端的非技术性。

使用子流程在成功验证时调用程序。因此,python脚本将启动程序,而不是批处理文件

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

请注意,如果用户有权从python或批处理脚本中启动程序,则没有任何东西可以阻止他们直接访问它。这将阻止任何人访问该程序;除了极端的非技术性之外。

我发现这两种方法希望能有所帮助

我发现这两种方法希望它们能有所帮助

如果有人可以通过批处理脚本访问程序,是什么阻止他们直接运行程序?没有。这只是一个简单的安全措施,防止不懂技术的人访问它,直到它有望在下一个版本中修补。如果有人可以通过批处理脚本访问该程序,是什么阻止他们直接运行它?什么都没有。这只是一个简单的安全措施,在下一个版本有望修补之前,它可以防止不懂技术的人访问它。这是一个好主意,我甚至没有想过。现在我甚至不需要批处理文件,因为我将用py2exe编译成.exe。我知道它不会阻止任何真正想访问它的人。至少打开它的命令是非常模糊的。它有一个内置的认证系统,但这是我偶然发现的一种后门类型的东西。我已经向开发人员报告了,我希望他们能在下一个版本中修补它。这只是暂时的解决办法:谢谢!这是个好主意,我甚至都没想过。现在我甚至不需要批处理文件,因为我将用py2exe编译成.exe。我知道它不会阻止任何真正想访问它的人。至少打开它的命令是非常模糊的。它有一个内置的认证系统,但这是我偶然发现的一种后门类型的东西。我已经向开发人员报告了,我希望他们能在下一个版本中修补它。这只是暂时的解决办法:谢谢!