我用一个程序(在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从那里。
如果任何人都可以给我任何建议或任何形式的帮助,我真的很感激它。 谢谢!
使用subprocess
来调用成功认证程序。 所以,你的python脚本将启动程序,而不是一个批处理文件。
if not authenticated:
print('Authentication failed')
sys.exit(1)
else:
print('Successfully authenticated!')
proc = subprocess.Popen([program])
请注意,如果用户有权限从一个Python或批处理脚本中启动该程序,没有什么是直接访问它阻止他们。 这将阻止访问该程序中没有一个; 保存也许是极端的非技术。
你可以做一些非常复杂,试图找到Python的进程的父PID并杀死或者你可以只检查%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/