Я ищу лучшее решение для моей проблемы.
Мне нужно запустить скрипт Python, а затем, пока он работает (в фоновом режиме), мне нужно изменить значение внутри, когда пользователь захочет это сделать,Это может происходить до 20 раз в час или даже больше, но будут периоды времени, когда ничего не произойдет.Поэтому изменения должны быть максимально чистыми.
Я работаю над следующим фоном.У меня есть два сценария: стартовый и основной.Задача основного сценария - установить последовательное соединение и установить связь с внешним устройством, и этот процесс выполняется как nohup main.py &
- после запуска он, вероятно, будет работать до перезагрузки.Задача стартового скрипта - просто запустить main, если нет дополнительного аргумента.Main работает в фоновом режиме, а стартер закрывается.
Если есть дополнительный аргумент, я хочу «соединиться» с уже запущенным main и отправить ему значение этого аргумента.В настоящее время я использую внешний файл «last.cfg» для обмена данными, но есть ли «лучшее» решение?Я читал о многопроцессорном модуле и использовании каналов, но я не смог приспособить это к своим потребностям.Возможно, я не видел чего-то важного.
Текущий пример захода на посадку (я обрезал ненужный код):
main.py
if __name__ == '__main__':
while True:
f = open("./desktop/last.cfg","r+")
contents = f.readline()
print(contents)
starter.py
import argparse
import subprocess
import re
parser = argparse.ArgumentParser()
parser.add_argument("val", nargs='?', default="null")
args = parser.parse_args()
if args.val == 'null':
sub = subprocess.Popen("nohup ./desktop/main.py &", shell=True)
else:
f = open("./desktop/last.cfg","r+")
content = f.readline()
p = re.compile('(val=)([0-9]*)')
content = p.sub('\g<1>'+args.val,content)
f.close()
f = open("./desktop/last.cfg","w+")
f.write(content)