在有限的时间内运行子进程的最佳方法是什么

时间:2018-03-30 20:10:32

标签: python bash python-3.x python-2.7 loops

我正在为我的Raspberry Pi创建一个新脚本(p.py),我正在尝试组合名为Final.py和A.py的2个python脚本。我想执行Final.py大约5秒钟,然后杀死它并继续攻击A.py,运行它25秒并杀死它并无休止地重复整个过程。但是,这两个脚本都是循环的,我不知道如何结束这些进程。这里是p.py代码:

29

有没有人知道更好的想法或更好的方法来解决这个问题?一切都会非常感激!

1 个答案:

答案 0 :(得分:1)

你正在尝试做的事情并没有任何意义。你运行这样的子脚本:

execfile('Finaaal.py') #looped script 1

execfile只是在当前解释器中运行该脚本,而不是作为单独的程序运行。这意味着如果没有杀死控制器脚本,脚本1.sh就无法杀死Finaaal.py

答案很简单 - 您已导入subprocess,您只需使用它来运行子脚本而不是execfile。然后你甚至不需要1.sh2.sh脚本;你可以直接kill进程:

import subprocess
import sys
import time

p = subprocess.Popen([sys.executable, 'Finaaal.py'])
time.sleep(5.0)
p.kill()
p = subprocess.Popen([sys.executable, 'A.py'])
time.sleep(5.0)
p.kill()

由于您已将问题标记为python-2.7python3.x,因此您可能需要考虑应使用哪个Python来运行子脚本。使用sys.executable意味着它与用于运行控制器脚本的那个相同,这通常是你想要的(但如果没有,显然会做一些与众不同的事情,无论是那个""硬编码python3"或者#34;无论shbang说什么"或者其他什么(适当的)。

(由于您似乎在POSIX上,您甚至可以修改Finaaal.pyA.py以捕获SIGKILL并根据需要执行一些干净的关闭。或者,如果您需要硬关机而不是使用该选项,请改用terminate。)