使用 subprocess.check_output() 调用时将打印安装到终端
mount printing to terminal when called with subprocess.check_output()
根据 subprocess documentation,subprocess.check_output(...) 应该 return进程的输出,如果 return 代码不为零,则引发 CalledProcessError 异常,输出在 output 中 属性。
如果我尝试 subprocess.check_output(["ls"])
之类的方法,我将字符串作为 return 值,则效果很好。但是,当我尝试
subprocess.check_output(shlex.split("mount -t cifs //server/share /local_rep"))
直接打印到终端"mount error(13): Permission denied
请参阅 mount.cifs(8) 手册页(例如 man mount.cifs)" 和 output 引发的异常的属性为空 - returncode 和 cmd设置正确。
我怎样才能做到不直接向终端输出任何内容,并将错误消息存储在output中?
subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)
'mostly' 将其参数直接传递给 Popen 构造函数:
class subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0),
默认值 stdin/stdout/stderr=None
表示 "no redirection will occur; the child's file handles will be inherited from the parent." 有人会注意到 subprocess.check_output(...)
没有 stdout
作为参数。这是因为 stdout
在内部使用 - 即 return 值或 output 属性的来源。但是,stderr=None
仍然是默认值,这意味着,在这种情况下,错误会直接打印到终端,而不会被 check_output()
和 return 异常拾取。
一个可能的解决方案是将 stderr=subprocess.STDOUT
传递给 subprocess.check_output(...)
,以便将错误消息发送到 STDOUT
,因此不会打印到终端,并存储在 输出以防异常.
根据 subprocess documentation,subprocess.check_output(...) 应该 return进程的输出,如果 return 代码不为零,则引发 CalledProcessError 异常,输出在 output 中 属性。
如果我尝试 subprocess.check_output(["ls"])
之类的方法,我将字符串作为 return 值,则效果很好。但是,当我尝试
subprocess.check_output(shlex.split("mount -t cifs //server/share /local_rep"))
直接打印到终端"mount error(13): Permission denied 请参阅 mount.cifs(8) 手册页(例如 man mount.cifs)" 和 output 引发的异常的属性为空 - returncode 和 cmd设置正确。
我怎样才能做到不直接向终端输出任何内容,并将错误消息存储在output中?
subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)
'mostly' 将其参数直接传递给 Popen 构造函数:
class subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0),
默认值 stdin/stdout/stderr=None
表示 "no redirection will occur; the child's file handles will be inherited from the parent." 有人会注意到 subprocess.check_output(...)
没有 stdout
作为参数。这是因为 stdout
在内部使用 - 即 return 值或 output 属性的来源。但是,stderr=None
仍然是默认值,这意味着,在这种情况下,错误会直接打印到终端,而不会被 check_output()
和 return 异常拾取。
一个可能的解决方案是将 stderr=subprocess.STDOUT
传递给 subprocess.check_output(...)
,以便将错误消息发送到 STDOUT
,因此不会打印到终端,并存储在 输出以防异常.