Python 3.x 如何通过检查生成的文件中的特定值来终止python中的linux进程?
我正在运行一个可执行文件(模拟),它会在每个间隔生成一个新的输出文件。我想检查每个输出文件的某个值,当超过该值时,模拟应该停止。我是从python脚本运行这个脚本的 这是已经起作用的Python 3.x 如何通过检查生成的文件中的特定值来终止python中的linux进程?,python-3.x,bash,scheduling,Python 3.x,Bash,Scheduling,我正在运行一个可执行文件(模拟),它会在每个间隔生成一个新的输出文件。我想检查每个输出文件的某个值,当超过该值时,模拟应该停止。我是从python脚本运行这个脚本的 这是已经起作用的 从python脚本运行可执行文件 command=project\u dir+'/EXECUTABLE/'+build\u folder\u name+'/INPUTFOLDER'+复制的\u文件\u路径 操作系统(命令) 一旦可执行文件启动,就会创建一个输出文件夹 一个接一个地创建输出文件(可变时间间隔) 使用求
操作系统(命令)
我考虑过使用子流程,但我不太确定如何使用它们。谢谢你的帮助 我正在做类似的事情,但使用的是csv文件。如果使用csv,则可以在单元格中迭代查找数据 使用csv模块:
import csv
import sys
def condition(filename, condition):
with open(filename + '.csv', 'r') as file:
file_reader = csv.reader(file)
for row in file_reader:
if condition in row:
print('condition met')
sys.exit()
添加此项并将输出文件重写为csv文件,而不是在答案中链接文档,因此如果您不知道如何使用csv,可以对其进行研究
如果需要退出所有python程序,请使用终端
pkill python
如果这不是一个大项目,我建议您将代码放在那里,这样我们就可以找到它的最佳实现 下面你可以看到一个例子,你可以尝试这样做 如果不是大型项目,可以在后台将子进程作为守护进程运行。 您还为它们设置了一个队列,以便它们可以与父进程通信 之后,使用
.join
将帮助我们关闭它们
下面是一个代码示例:
import multiprocessing as mp
import time
import queue
running_flag = mp.Value("i", 1)
def worker(running_flag, q):
count = 1
while True:
if running_flag.value:
print "working {0} ...".format(count)
count += 1
q.put(count)
time.sleep(1)
if count > 3:
# Simulate hanging with sleep
print "hanging..."
time.sleep(1000)
def watchdog(q):
"""
This check the queue for updates and send a signal to it
when the child process isn't sending anything for too long
"""
while True:
try:
msg = q.get(timeout=10.0)
except queue.Empty as e:
print "[WATCHDOG]: Maybe WORKER is slacking"
q.put("KILL WORKER")
def main():
"""The main process"""
q = mp.Queue()
workr = mp.Process(target=worker, args=(running_flag, q))
wdog = mp.Process(target=watchdog, args=(q,))
# run the watchdog as daemon so it terminates with the main process
wdog.daemon = True
workr.start()
print "[MAIN]: starting process P1"
wdog.start()
# Poll the queue
while True:
msg = q.get()
if msg == "KILL WATCHDOG":
print "[MAIN]: Terminating slacking WORKER"
workr.terminate()
time.sleep(0.1)
if not workr.is_alive():
print "[MAIN]: WORKER is a goner"
workr.join(timeout=1.0)
print "[MAIN]: Joined WORKER successfully!"
q.close()
break # watchdog process daemon gets terminated
if __name__ == '__main__':
main()
谢谢你的回复,但我不能用csv重写。但是假设我可以,它将使用sys.exit()终止所有内容否?那么它也将终止正在运行的python脚本吗?因为我将从终端运行它。不,如果您想从终端杀死python,请使用我放在代码下面的命令。非常感谢。这似乎是我所需要的,但我不知何故无法理解代码中发生了什么。你能解释一下什么是什么吗?