亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

文件相關操作python子進程vs.原生python

文件相關操作python子進程vs.原生python

慕田峪9158850 2022-06-28 10:12:29
我想通過 ssh 執行一個簡單的任務:返回給定文件列表中不存在的所有文件。我這樣做的方法是將以下內容包裝在 ssh 會話中:for f in $(files); do stat $f > /dev/null ;donestdout 重定向將忽略所有好的文件,然后讀取 stderr 將為我提供所有未找到文件的列表。我首先想到將這個 bash 代碼與 a 中的 ssh 部分一起使用,subprocess.run(..., shell=True)但不鼓勵這樣做。相反,paramiko有人建議。我試圖理解為什么以及何時原生 python 比子處理 bash 更好不同操作系統的可計算性(對我來說不是問題,因為代碼與 Ubuntu 緊密相關)錯誤和異常處理 - 我確實得到并認為它很重要,盡管從子進程中捕獲異常或退出代碼也很容易在我看來,原生 python 的缺點是當 bash 的 ssh 和 stat 在我看來更加簡單易用時,需要涉及一些復雜的模塊,例如 paramiko是否有關于何時以及如何選擇 bash 而不是 python 的指南?這個問題主要是關于在 ssh 上使用命令,但與 bash 以簡單快捷的方式執行的任何其他命令以及 python 換行有關
查看完整描述

1 回答

?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

這里實際上有三種選擇:在進程中做某事(如paramiko)、ssh 直接運行(使用subprocess)和ssh使用shell運行(也使用subprocess)。作為一般規則,避免以編程方式運行 shell(而不是根據交互式用戶請求)。

原因是它是一個以人為本的界面(因此很容易將單詞與空格、快捷鍵$HOME和通配符分開)作為 API 的功能大大不足。例如,考慮一下您的代碼如何檢測到ssh丟失的情況:這種情況不會出現paramiko(只要已安裝),很明顯subprocess,并且只是來自 shell 的(模棱兩可的)退出代碼和 stderr 消息。還要考慮如何提供要運行的命令:它必須是適合 shell 的命令(由于 SSH 協議的限制),但如果ssh 使用shell 調用,則必須對其進行編碼(有時稱為“雙重轉義”)以使本地 shell 的解釋成為遠程 shell 所需的多字命令。

到目前為止,paramiko幾乎subprocess是等價的。作為一個更困難的情況,考慮密鑰驗證失敗將如何表現:paramiko將失敗描述data,而其他人將嘗試與用戶交互(可能存在也可能不存在)。 paramiko還支持在一個經過身份驗證的連接上打開多個通道;ssh這樣做也是如此,但只能通過ControlMaster涉及 Unix 套接字文件的復雜配置(在某些部署中可能沒有任何好地方存在)。說到配置,如果在設計時沒有考慮到這種自動化用例,您可能需要通過-F以避免用戶的復雜性。.ssh/config

總之,庫是為像您這樣的用例而設計的,因此它們比從面向人類的命令組裝您自己的界面(盡管這種手動組合非常有用)更好地工作也就不足為奇了,特別是對于邊緣情況可能?。?。如果安裝一個非標準的依賴喜歡paramiko是一種負擔,至少直接使用subprocess;去掉第二個殼已經是很大的進步了。


查看完整回答
反對 回復 2022-06-28
  • 1 回答
  • 0 關注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號