python-3.x fabric.API.sudo()在错误条件下返回空stderr

x33g5p2x  于 2022-12-30  发布在  Python
关注(0)|答案(1)|浏览(123)

我是fabric新手。我正在以res = fabric.api.sudo(f"pip install {something}",user=user)身份运行命令。我希望该命令在未找到包/版本(即pip安装失败)时返回stderr或中止。但是,我收到res. return_code = 0、res. stderr、在错误条件下为空。我在stdout上得到了ERROR消息。这是预期行为吗?我如何使stderr具有错误条件和正确的return_密码?

    • 版本:**使用带有版本1.14.post1的Fabric3

任何帮助都很好,谢谢。

ctehm74n

ctehm74n1#

根据文档,combine_stderr的默认值为True,这意味着 stderrstdout 组合在单个流中。如果要单独检索 stderr 上的输出,则需要显式将combined_stderr设置为False(并将pty设置为False):

>>> res = fabric.operations.sudo('sh -c "echo hello; echo world >&2"', pty=False, combine_stderr=False)
[rocket] sudo: sh -c "echo hello; echo world >&2"
[rocket] out: hello
[rocket] out: [rocket] err: world
[rocket] err:

>>> res.stdout
'hello'
>>> res.stderr
'world'

相关问题