Проблемы с nohup кода python, который вызывает другой nohup? - PullRequest
0 голосов
/ 15 января 2020

Проблема в следующем.

У меня есть python код "test.py", который вызывает командную строку:

os.system('nohup some_command > b.txt &')
print(some_results)

, и он хорошо работает, который перенаправляет вывод информации «some_command» в «b.txt» и вывод только «some_results» на терминал.

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

nohup python test.py > a.txt &

Теперь все, включая «some_results» и выходные данные «some_command», перенаправляется в «a.txt», что вызывает программа работает неправильно.

Есть ли способ перенаправить только "some_results", а не все, в "a.txt"? Что мне делать?

PS: я не знаю, по каким ключевым словам я должен искать, и с помощью поиска "nohup in nohup" я не нашел соответствующего решения.

===== ======================== Некоторые неудачные попытки ======================= ==

Прочитав рекомендованный вопрос: Перенаправить стандартный вывод в файл в Python?

У меня возникла идея:

import sys
sys.stdout=open('c.txt','w')
os.system('nohup some_command > b.txt &')
print(some_results)

Но проблема все еще не решена.

nohup python test.py > a.txt & перенаправляет вывод python в «c .txt» (как и ожидалось), а все остальное в «a.txt» вместо «b». txt "и вызывает ошибку.

python test.py > a.txt & работает временно: он перенаправляет выходные данные python в" c .txt ", команда выводит в" b.txt "и оставляет" a .txt "пусто, как и ожидалось (вроде).

Однако на терминале будут появляться сообщения" nohup: перенаправление stderr на stdout "при каждом вызове команды" os.system ". После перезапуска терминала сообщения больше не появляются, и программа все еще работает, но перенаправление становится таким же, как nohup python test.py > a.txt &.

============== Некоторые дополнительные информация =====================

os.system(blabla) выполняется несколько раз.

"some_command" на самом деле " pocketsphinx ", который выводит множество журналов, включая выравнивание по времени фонем, и, наконец, строку, описывающую последовательность фонем без выравнивания по времени. Мне нужен раздел «выравнивание по времени».

В нормальных условиях последняя строка всегда следует за разделом информации, независимо от того, где они напечатаны.

В моей задаче последняя строка всегда в "b.txt" правильно. Информация (включая временные выравнивания, которые я хочу, чтобы они были в "b.txt") перенаправляются куда-то еще.

1 Ответ

1 голос
/ 15 января 2020

В вашем скрипте просто перенаправьте и stdout, и stderr в файл, без nohup, без фона:

os.system('some_command > b.txt 2>&1')
print(some_results)

В терминале:

nohup python my_script.py > a.txt &
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...