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

时间:2012-08-10 18:22:13

标签: python batch-file exit-code

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

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

我最初的计划是让我的脚本(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。

如果有人能给我任何建议或帮助,我会非常感激。 谢谢!

3 个答案:

答案 0 :(得分:2)

使用subprocess在成功验证时调用程序。所以你的python脚本会启动程序,而不是批处理文件。

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

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

答案 1 :(得分:1)

你可以做一些非常复杂的事情来尝试找到Python进程的父PID并将其删除,或者你只需​​检查批处理文件中的%ERRORLEVEL%即可。类似的东西:

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

答案 2 :(得分:1)