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

Posted

技术标签:

【中文标题】如何使用 python 停止程序的执行?【英文标题】:How can I stop a program's execution with python? 【发布时间】:2012-08-10 18:22:13 【问题描述】:

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

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

【问题讨论】:

如果有人可以通过批处理脚本访问该程序,是什么阻止他们直接运行它? 没什么。这只是一种轻微的安全措施,可防止非技术倾向的人访问它,直到它有望在下一个版本中得到修补。 【参考方案1】:

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

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

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

【讨论】:

这是个好主意,我什至没有想到。现在我什至不需要批处理文件,因为无论如何我都会用 py2exe 编译成 .exe。而且我知道它不会阻止任何真正想要访问它的人。至少打开它的命令真的很模糊。它有一个内置的身份验证系统,但这是我偶然发现的一种后门类型的东西。我已经向开发人员报告了它,我希望他们会在下一个版本中对其进行修补。这只是一个临时解决方案 :) 谢谢!【参考方案2】:

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

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

【讨论】:

【参考方案3】:

我找到了这两种方法,希望对你有帮助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/

【讨论】:

以上是关于如何使用 python 停止程序的执行?的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止警告对话框停止执行控制它的 Python 程序?

在 Python 中,如何执行 .exe 文件并在 n 秒后停止它? [复制]

如何在Python PyQt中中断QThread上的脚本执行?

如何使用 Python 中的 subprocess 模块启动和停止 Linux 程序?

python 如何中断程序停止程序退出程序?sys.exit()os._exit()os.kill()

如何中断嵌入在 C++ 应用程序中的 python 解释器