Python 3.x 如何通过检查生成的文件中的特定值来终止python中的linux进程?

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路径 操作系统(命令) 一旦可执行文件启动,就会创建一个输出文件夹 一个接一个地创建输出文件(可变时间间隔) 使用求

我正在运行一个可执行文件(模拟),它会在每个间隔生成一个新的输出文件。我想检查每个输出文件的某个值,当超过该值时,模拟应该停止。我是从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,请使用我放在代码下面的命令。非常感谢。这似乎是我所需要的,但我不知何故无法理解代码中发生了什么。你能解释一下什么是什么吗?