失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python jupyter输出结果_Jupyter noteb中Python子进程的实时stdout输出

python jupyter输出结果_Jupyter noteb中Python子进程的实时stdout输出

时间:2020-07-12 00:56:20

相关推荐

python jupyter输出结果_Jupyter noteb中Python子进程的实时stdout输出

Jupyter和stdout和stderr混在一起。这将得到您想要的结果,并在命令无法引导时为您提供一个更有用的异常。import signal

import subprocess as sp

class VerboseCalledProcessError(sp.CalledProcessError):

def __str__(self):

if self.returncode and self.returncode < 0:

try:

msg = "Command '%s' died with %r." % (

self.cmd, signal.Signals(-self.returncode))

except ValueError:

msg = "Command '%s' died with unknown signal %d." % (

self.cmd, -self.returncode)

else:

msg = "Command '%s' returned non-zero exit status %d." % (

self.cmd, self.returncode)

return f'{msg}\n' \

f'Stdout:\n' \

f'{self.output}\n' \

f'Stderr:\n' \

f'{self.stderr}'

def bash(cmd, print_stdout=True, print_stderr=True):

proc = sp.Popen(cmd, stderr=sp.PIPE, stdout=sp.PIPE, shell=True, universal_newlines=True,

executable='/bin/bash')

all_stdout = []

all_stderr = []

while proc.poll() is None:

for stdout_line in proc.stdout:

if stdout_line != '':

if print_stdout:

print(stdout_line, end='')

all_stdout.append(stdout_line)

for stderr_line in proc.stderr:

if stderr_line != '':

if print_stderr:

print(stderr_line, end='', file=sys.stderr)

all_stderr.append(stderr_line)

stdout_text = ''.join(all_stdout)

stderr_text = ''.join(all_stderr)

if proc.wait() != 0:

raise VerboseCalledProcessError(proc.returncode, cmd, stdout_text, stderr_text)

如果觉得《python jupyter输出结果_Jupyter noteb中Python子进程的实时stdout输出》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。