Как перенаправить stdout stderr из os.execlpe () в файл - PullRequest
1 голос
/ 10 мая 2019

Я ударился головой о стену, выполняя jpyter nbconvert из python следующим образом, так как он позволяет мне передавать аргументы в блокнот jupyter:

env['IPYTHONARGV'] = json.dumps({'timeperiod':timeperiod,'infile':infile})
os.execlpe('jupyter', 'jupyter', 'nbconvert', '--execute','notebook.ipynb', 
           '--to', 'html', '--output', output_html, '2>&1', '1>log.out',  env)

Если пропустить часть '2>&1', '1>log.out',, команда работает просто отлично. Но с перенаправлением bash команда жалуется на следующее:

[NbConvertApp] WARNING | pattern '2>&1' matched no files
[NbConvertApp] WARNING | pattern '1>log.out' matched no files

Кто-нибудь знает, как решить эту проблему?

1 Ответ

0 голосов
/ 10 мая 2019

Перенаправления 2>&1 ad 1>log.out интерпретируются оболочкой, но вы предоставляете их команде в качестве аргументов. Вот почему Jupyter жалуется, что не может найти их в виде файлов.

Вы можете использовать subprocess с shell=True:

import subprocess as sp
env['IPYTHONARGV'] = json.dumps({'timeperiod':timeperiod,'infile':infile})
sp.check_call('jupyter nbconvert --execute notebook.ipynb --to html --output output_html 2>&1 1>log.out', shell=True, env=env)

Вы можете использовать sp.check_output() и удалить перенаправление, если вам нужно обработать вывод в Python.

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