Я работал на очень простом сервере node.Js с некоторыми маршрутами.Я попытался реализовать один маршрут, который сможет запускать скрипт python (3.6) при каждом его достижении, используя пакет Node Js child-process
.Проблема заключается в следующем: когда я пытаюсь это сделать, запустив свой скрипт с правильными аргументами командной строки, ничего не происходит.
Я уже пытался выполнить простую команду, например, создание пустого файла или просто pwd
все отлично работаетво-вторых, как вы можете видеть ниже, в моем скрипте на python я использую пакет logging
python для отслеживания рабочего процесса.К сожалению, мой logfile.log
пуст.Я также попытался получить поток обратно из python и вывести на стандартный вывод: ничего.путь к сценарию правильный, поэтому я не знаю, в чем разница между моим ручным выполнением сценария и кодом node.js.
Код Node.Js:
app.get('/trigger',(req, res) => {
console.log('/trigger');
console.log(__dirname + "/../scripts/launcher.py")
var key = req.query['Key'];
const spawn = require('child_process').spawn;
const pythonProcess = spawn("python3.6", [__dirname + "/../scripts/launcher.py", key]);
console.log("process started with pid : " + pythonProcess.pid);
pythonProcess.stdout.on('data', (data) => {
console.log("child stdout")
console.log(`\n${data}`);
});
res.status(200).send()
})
Python-код:
def init_logger():
# create logger with 'spam_application'
logger = logging.getLogger('spam_application')
logger.setLevel(logging.DEBUG)
# Load variable to env
load_dotenv()
# create file handler which logs even debug messages
fh = logging.FileHandler(dir_path + '/logfile.log')
fh.setLevel(logging.DEBUG)
# create formatter
formatter = logging.Formatter("%(asctime)s; %(levelname)s ; %(message)s",
"%d-%m-%Y %H:%M:%S ")
fh.setFormatter(formatter) # add formatter to ch
logger.addHandler(fh) # add ch to logger
return logger
def main():
logger = init_logger()
logger.info("logfile has been updated :D")
# Downloading mail before processing it
raw_mail = fetch_mail(sys.argv[1])
mailer = MailManager(logger)
if mailer.entry_point(raw_mail) == -1:
logger.error("Sender Not Authorized")
return -1
uploader = Uploader(logger)
uploader.initialize_warning_count()
result = mailer.get_mailobj()
uploader.entry_point(result)
return 0
и, наконец, Node.js pm2 logs:
0|| 2019-09-23T12:29:55: /trigger
0|| 2019-09-23T12:29:55: my/path/to/script/launcher.py
0|| 2019-09-23T12:29:55: process started with pid : 19068
Итак, у меня есть PID, что означает, что команда работает хорошо (я не уверен).Я хотел бы иметь возможность иметь журнал Python внутри logfile.log (как, когда я тестировал вручную).С этим журналом я смогу узнать, что на самом деле происходит.
Спасибо, ребята, если вам нужна дополнительная информация о моей проблеме, пожалуйста, оставьте комментарий или вы можете свободно редактировать.
Среда: python3.6, узел v8.10.0 в экземпляре Ubuntu EC2.