[英]fabric.api.sudo() returning empty stderr on error condition
我是面料新手。 我正在運行一個命令res = fabric.api.sudo(f"pip install {something}",user=user)
我希望命令在找不到包/版本時返回 stderr 或中止,即 pip 安裝失敗。 但是我得到一個 res.return_code=0,res.stderr,在錯誤情況下為空。 我確實在標准輸出上收到錯誤消息。 這是預期的行為嗎? 如何使 stderr 具有錯誤條件和正確的 return_code?
版本:使用 Fabric3 版本 1.14.post1
任何幫助都會很棒,謝謝。
根據文檔, combine_stderr
的默認值為True
,這意味着stderr與stdout組合在一個 stream 中。 如果要在stderr上單獨檢索 output,則需要將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'
該命令有多個帶有管道的命令。 因此需要利用 PIPESTATUS 來獲取正確的返回碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.