如何将os.execlpe()的stdout stderr重定向到文件中

时间:2019-05-10 06:07:35

标签: python bash stdout jupyter nbconvert

我正撞在墙上,按照以下方式从python运行jpyter nbconvert,因为它允许我将参数传递给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 :(得分:0)

shell解释了重定向2>&11>log.out,但是您正在将它们作为参数提供给命令。这就是为什么Jupyter抱怨无法将它们作为文件找到。

您可以将subprocessshell=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)

如果您需要使用Python处理输出,则可以使用sp.check_output()并删除重定向。