#!/usr/bin/python3 import fcntl import time import subprocess import os import asyncio QUEUE_FILE = 'queue.txt' COMMAND = './command.sh' loop = asyncio.get_event_loop() class JobHandler(asyncio.SubprocessProtocol): def process_exited(self): print() def do_job(command=None, arg=None): assert(command) assert(arg) print('arg:', arg) print('doing operation with arg') #ret = subprocess.check_call([command, arg]) loop.suprocess_exec([command, arg], stdin=subprocess.DEVNULL, stdout=sys.stdout, stderr=sys.stderr) print('ret:', ret) return ret == 0 def read_next_job_arg(): with open(QUEUE_FILE, 'r') as f: line = f.readline() return line.strip() def pop_job_arg(): queue = QUEUE_FILE queue_tmp = queue + '.tmp' linecount = 0 with open(queue, 'r') as fi, open(queue_tmp, 'w') as fo: for line in fi: linecount += 1 if linecount == 1: continue fo.write(line) os.rename(queue_tmp, queue) def check_queue(): #loop = asyncio.get_event_loop() #loop.run_forever() #with open('queue.txt', 'w') as f: # fcntl.lockf(f, fcntl.LOCK_EX) # time.sleep(9999) #while True: # job_arg = read_next_job_arg() # if do_job(command=COMMAND, arg=job_arg): # pop_job_arg() #loop = asyncio.get_event_loop() loop.run_forever()