如何使用通过模块sys运行的命令来获取Python程序?

问题描述 投票:4回答:4

我想通过使用模块sys发出命令来查看Python程序如何自杀。我怎么能用以下形式的命令让它自杀呢?:

os.system(killCommand)

编辑:强调清晰

所以,为了清楚起见,我希望有一个在shell中运行的字符串可以杀死Python程序。

python shell kill
4个回答
16
投票

您可以使用sys.exit()正常退出程序。

通过提高SystemExit(status)退出翻译。如果省略状态或None,则默认为零(即成功)。如果状态是整数,则将其用作系统退出状态。如果它是另一种对象,它将被打印并且系统退出状态将是一个(即,失败)。


杀死解释器本身的系统命令取决于所使用的shell;如果你的shell是bashzsh,你可以使用:

a@host:~$ python
Python 2.7.8 (default, Oct 20 2014, 15:05:19) 
[GCC 4.9.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.system('kill $PPID')
Terminated
a@host:~$

虽然您的实际结果可能有所不同为了更安全,您需要自己提供进程ID:

>>> os.system('kill %d' % os.getpid())

如果您只想将一个获取信号发送到您的流程,您还可以将os.kill()与流程的流程ID一起使用; os.getpid()提供了当前正在运行的进程的进程ID:

a@host:~$  python
Python 2.7.8 (default, Oct 20 2014, 15:05:19) 
[GCC 4.9.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.kill(os.getpid(), 9)
[1]    27248 killed     python
a@host:~$ 

2
投票

sys.exit(1)将终止当前的计划。参数是退出状态 - 除了0表示异常终止。


0
投票

实际上它是sys.exit的用途:

sys.exit([arg])

退出Python。这是通过引发SystemExit异常来实现的,因此可以接受try语句的finally子句指定的清除操作,并且可以拦截外层的退出尝试。

可选参数arg可以是一个整数,给出退出状态(默认为零)或其他类型的对象。如果它是整数,则零被认为是“成功终止”,并且任何非零值被贝壳等视为“异常终止”。大多数系统要求它在0-127范围内,否则会产生不确定的结果。有些系统有一个约定,用于为特定的退出代码分配特定的含义,但这些通常是不发达的; Unix程序通常使用2表示命令行语法错误,1表示所有其他类型的错误。如果传递了另一种类型的对象,则None等效于传递零,并且任何其他对象将打印到stderr并导致退出代码为1.特别是,sys.exit(“some error message”)是一种快速方法发生错误时退出程序。

由于exit()最终“仅”引发异常,因此它只会在从主线程调用时退出进程,并且异常不会被截获。


0
投票

如果您在主进程(即您的邮件python脚本)中,则可以使用os模块

import os
import signal

#Your Python code
os.kill(os.getpid(),signal.SIGKILL)
© www.soinside.com 2019 - 2024. All rights reserved.