ipython 子进程的笔记本输出
ipython notebook output from child process
使用 ipython 笔记本时,subprocess
生成的子进程的输出永远不会显示在笔记本本身中。例如这个单元格
import subprocess
subprocess.check_call(['echo', 'hello'])
仅显示 0
作为输出,hello
打印在启动 ipython 的终端上。
是否有任何我可以调整的配置参数,以便子进程的输出显示在笔记本本身中?
实际上,自定义 python c 扩展也会吞噬它们的输出。有什么解决方法吗?
如果要捕获输出,请使用 check_output
。 check_call
returns 退出代码。
import subprocess
print subprocess.check_output(['echo', 'hello'])
from subprocess import Popen, PIPE
p = Popen (['echo', 'hello'], stdout=PIPE)
out = p.communicate ()
print (out)
(b'hello\n', None)
你也可以看看stderr,类似的
来自 python3.5+
我觉得我应该添加一个更好的答案。 subprocess
模块现在提供 run
方法,该方法根据 documentation:
The recommended approach to invoking subprocesses is to use the run() function for all use cases it can handle. For more advanced use cases, the underlying Popen interface can be used directly.
from subprocess import run, PIPE
result = run (['echo', 'hello'], stdout=PIPE)
print (result.returncode, result.stdout)
0 b'hello\n'
使用 ipython 笔记本时,subprocess
生成的子进程的输出永远不会显示在笔记本本身中。例如这个单元格
import subprocess
subprocess.check_call(['echo', 'hello'])
仅显示 0
作为输出,hello
打印在启动 ipython 的终端上。
是否有任何我可以调整的配置参数,以便子进程的输出显示在笔记本本身中?
实际上,自定义 python c 扩展也会吞噬它们的输出。有什么解决方法吗?
如果要捕获输出,请使用 check_output
。 check_call
returns 退出代码。
import subprocess
print subprocess.check_output(['echo', 'hello'])
from subprocess import Popen, PIPE
p = Popen (['echo', 'hello'], stdout=PIPE)
out = p.communicate ()
print (out)
(b'hello\n', None)
你也可以看看stderr,类似的
来自 python3.5+
我觉得我应该添加一个更好的答案。 subprocess
模块现在提供 run
方法,该方法根据 documentation:
The recommended approach to invoking subprocesses is to use the run() function for all use cases it can handle. For more advanced use cases, the underlying Popen interface can be used directly.
from subprocess import run, PIPE
result = run (['echo', 'hello'], stdout=PIPE)
print (result.returncode, result.stdout)
0 b'hello\n'