我正在运行一个python脚本,它使用popen方法执行一个使用subprocess模块的脚本。我遇到的问题是,即使我有一个terminate命令,我通过popen调用的脚本仍然在运行。 请注意-当我单独运行.par脚本时,终止它的唯一方法是发送一个击键-“e”+return。我的问题是如何在运行脚本5秒后终止它。这是我到目前为止得到的-
#! /usr/bin/python
import subprocess
pro = subprocess.Popen('/home/xxx/bin/xxy.par', shell=True)
out=pro.communicate()
print out ### this prints out the output of the .par script
pro.terminate() ### this is for killing the .par script
.par脚本运行时的输出。退出脚本的方法是发送键-e+enter。否则它将继续运行并不断报告状态信息。你知道吗
------------ [ Press key + <ENTER>: a=Attach, c=Config, d=Detach, e=Exit, l=Analyze, m=Airplane Mode, p=Toggle Ping, q=Toggle QXDM, r=ReAttach, s=ADB Shell ] ------------
I 09:56:26 <phase: control_ue> - RadioState: ON, Airplane Mode: OFF, RegState: REG_HOME, Data: CONNECTED, RAT: LTE, PING: OFF, QXDM: OFF, Battery: 100%
I 09:56:26 <phase: control_ue> - , RSRP: -86, RSSNR: 30.0, RSRQ: -7, PCI: 24, TAC: 766666, eNB/cellId: ddd
------------ [ Press key + <ENTER>: a=Attach, c=Config, d=Detach, e=Exit, l=Analyze, m=Airplane Mode, p=Toggle Ping, q=Toggle QXDM, r=ReAttach, s=ADB Shell ] ------------
I 09:56:26 <phase: control_ue> - RadioState: ON, Airplane Mode: OFF, RegState: REG_HOME, Data: CONNECTED, RAT: LTE, PING: OFF, QXDM: OFF, Battery: 100%
I 09:56:26 <phase: control_ue> - , RSRP: -86, RSSNR: 30.0, RSRQ: -7, PCI: 24, TAC: 766666, eNB/cellId: ddd
------------ [ Press key + <ENTER>: a=Attach, c=Config, d=Detach, e=Exit, l=Analyze, m=Airplane Mode, p=Toggle Ping, q=Toggle QXDM, r=ReAttach, s=ADB Shell ] ------------
I 09:56:26 <phase: control_ue> - RadioState: ON, Airplane Mode: OFF, RegState: REG_HOME, Data: CONNECTED, RAT: LTE, PING: OFF, QXDM: OFF, Battery: 100%
I 09:56:26 <phase: control_ue> - , RSRP: -86, RSSNR: 30.0, RSRQ: -7, PCI: 24, TAC: 766666, eNB/cellId: ddd
------------ [ Press key + <ENTER>: a=Attach, c=Config, d=Detach, e=Exit, l=Analyze, m=Airplane Mode, p=Toggle Ping, q=Toggle QXDM, r=ReAttach, s=ADB Shell ] ------------
使用系统工具终止脚本
假设您在Posix系统(如Linux)上运行,则可以使用信号终止脚本,而不考虑可以使用特定于脚本的命令来请求脚本退出。您使用的^{} 方法将} 方法发送其他信号。} 方法发送),因此如果其他信号不工作,您可以使用它。你知道吗
SIGTERM
发送到您的子进程。当脚本接收到那个信号时,它看起来并没有退出。您可以使用^{SIGINT
通常是程序运行时按ctrl-c发送的信号。通常认为发送SIGTERM
或SIGINT
是一个好主意,因为正在运行的程序可以捕获它们并执行它想要的任何清理。但这也意味着它可以捕捉到信号并完全忽略它。它不能忽略SIGKILL
信号(您也可以使用^{链接的文档解释了Windows系统上的不同行为。你知道吗
请注意,由于脚本需要stdin上的输入,因此您可能必须确保stdin已连接到管道,以免它挂起等待输入。你知道吗
向脚本发送退出命令
因为脚本有一个退出命令,所以也可以通过
stdin
与它通信来发送该命令。当您通过将脚本上的stdin
连接到管道来进行Popen
调用时,必须对此进行设置。然后可以使用communcate
方法向它发送命令:相关问题 更多 >
编程相关推荐