Как инициировать несколько сценариев Python, используя процессы отдельного экрана с помощью сценария Python - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь запустить несколько скриптов Python на отдельных экранах.Я создаю сценарий Python для запуска каждого сеанса экрана, но они не запускаются.Я думаю, что это связано с подпроцессом. Открыть.Команда, которую я помещаю в Popen, работает, когда помещается прямо в командную строку.В настоящее время он проходит цикл, печатая команду, которую должен выполнить, но сценарии не запускаются.

Я добавил полные пути к файлам, чтобы убедиться, что все команды могут быть выполнены.Я скопировал команду, которая должна была быть запущена непосредственно из консоли (я распечатал команду перед попыткой ее запуска), и вставил ее непосредственно в консоль, и она работает.Я просмотрел много постов, но не смог найти ту, которая охватывает мою конкретную проблему.


count = 0
generic_command = 'screen -dm bash -c "source /home/<user>/py2/bin/activate; python /home/<user>/folder/{f} {arg1} {arg2} > {log_file}"'

generic_log_file = '/home/<user>/folder/logs/log_{file_type}_{date}_{time}.txt'



to_run = {
    'file':[
        'run_brands.py',
        'run_brands.py',
    ],
    'arg1':[
        'category',
        'subcategory',
    ],
    'arg2':[
        '3',
        '8',
    ],
    'file_type':[
        'string_to_add',
        'string_to_add_2',
    ]
}


while count < len(to_run['file']):

    now = datetime.datetime.now()
    date = now.date()
    time = now.time()
    addition = ''
    if date.month < 10:
        addition = '0'

    curr_date = "{m}{d}{y}".format(m = addition + str(date.month), 
         d = date.day, y = str(date.year)[2:])
    curr_time = "{h}{m}".format(h = time.hour, m = time.minute)

    log_file = generic_log_file.format(file_type = to_run['file_type'][count], 
        date = curr_date, time = curr_time)

    curr_command = generic_command.format(count = count, 
        f = to_run['file'][count], 
        arg1 = to_run['arg1'][count], 
        arg2 = to_run['arg2'][count], 
        log_file = log_file)

    print('Running command: ' + curr_command)

    process = subprocess.Popen(curr_command.split(), stdout=subprocess.PIPE)

    output, error = process.communicate()

    count += 1
print 'Finished starting loop'

Я ожидаю, что экраны будут отсоединены и запущены после завершения этого скрипта.Скрипты на экранах имеют вывод, который перенаправляется в файлы, которые также не были созданы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...