簡體   English   中英

fabric.api.sudo() 在錯誤條件下返回空標准錯誤

[英]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 ,這意味着stderrstdout組合在一個 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM