через те, як мій хостинг робить речі, я повинен використовувати систему для надання послуг.
У цій службі є запущений файл, який він виконує, і передається у файл другого запуску. Але я використовую (заданий) пакет python, який записується до stderr замість stdout, і я не можу змусити його робити те, що я хочу.
Тому у мене є сценарій запуску для моєї служби:
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py
який прокладений під час роботи системи журналу:
#!/bin/sh
exec multilog t ./main
Але труба не з'єднує stderr (як очікувалося). Тож після googling я додав перехід до свого запуску:
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py 2>&1
Але це не вирішує мою проблему: мої власні результати (для виведення з використанням пітонів друку) реєструються як очікувалося. Вихід більш жорсткий не записується.
Якщо я перенаправляю модифікований сценарій на два файли, це показує, що перенаправлення немає (stderr все ще знаходиться на stderr). Як мені потрібно змінити перенаправлення на роботу?
dup2()
у коді. Будь-яка ідея , де вихід STDERR це відбувається? Ще одна думка: можливо, запущений файл вашого хостера перенаправляє stderr таким чином перед запуском коду.
import sys; print("Hello, stderr", file=sys.stderr)
щоб бути впевненим.
exec python3.4 ~/webapp/PriceList/src/main.py > out.log 2> err.log
і погляньте на цей журнал.
exec ... 2>&1
дійсно приєднує стандартну помилку до стандартної. Тож щось інше криється.