Я пытаюсь запустить несколько скриптов 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'
Я ожидаю, что экраны будут отсоединены и запущены после завершения этого скрипта.Скрипты на экранах имеют вывод, который перенаправляется в файлы, которые также не были созданы.