我使用的程序(在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。
如果有人能给我任何建议或帮助,我会非常感激。 谢谢!
答案 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)