2

我使用了一个程序(在 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 从那里。

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

4

3 回答 3

2

用于subprocess在认证成功时调用程序。因此,您的 python 脚本将启动程序,而不是批处理文件。

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

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

于 2012-08-10T18:27:26.010 回答
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/

于 2012-08-10T18:35:45.627 回答
1

你可以做一些非常复杂的事情来尝试找到 Python 进程的父 PID 并杀死它,或者你可以只检查%ERRORLEVEL%你的批处理文件。就像是:

python auth.py
if %ERRORLEVEL% neq 0 exit /B 1
于 2012-08-10T18:26:54.183 回答