在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 第三部分 擴(kuò)展庫
附錄
進(jìn)程通信
類
操作系統(tǒng)
迭代器
模塊
描述符
裝飾器
第三部分 擴(kuò)展庫
內(nèi)置類型
數(shù)據(jù)存儲(chǔ)
數(shù)據(jù)類型
基本環(huán)境
文件與目錄
異常
程序框架
數(shù)學(xué)運(yùn)算
函數(shù)
元類
字符串
表達(dá)式

第三部分 擴(kuò)展庫

A. Fabric

通過 SSH 進(jìn)行軟件部署或系統(tǒng)管理。

設(shè)置

在連接目標(biāo)主機(jī)之前,必須提供足夠的配置信息。

  • env.hosts: 目標(biāo)主機(jī)列表。格式: ip, user@ip, user@ip:port。
  • env.host_string: 單機(jī),格式同 hosts。
  • env.roledefs: 按角色定義主機(jī)列表。格式: {name:[host, ...]}。
  • env.passwords: 主機(jī)密碼字典。格式: {host: password},和 hosts 中保持格式一致。
  • env.user: 默認(rèn)用戶名。
  • env.port: 默認(rèn)端口。
  • env.password: 默認(rèn)密碼。
  • env.parallel: 是否并行執(zhí)行任務(wù)。
  • env.skip_bad_hosts: 是否跳過無法連接的主機(jī)。
  • env.timeout: 連接超時(shí),默認(rèn) 10 秒。
  • env.warn_only: 出錯(cuò)時(shí)是否僅顯示警告信息。默認(rèn) False 終止任務(wù)。

任務(wù)

任務(wù)就是些普通函數(shù),可以直接用 execute 執(zhí)行,或在命令行調(diào)用。

  • 默認(rèn): 所有 env.hosts 或 host_string。
  • 主機(jī): host 單主機(jī),host 多主機(jī)列表。
  • 角色: role 單個(gè)角色,roles 多個(gè)角色名列表。

也可用裝飾器設(shè)置這些參數(shù)。另外,最好顯式關(guān)閉連接。

from fabric.api import *
from fabric.network import *

def rcmd(s): run(s)

env.user = "root"
env.password = "123456"
env.hosts = ["192.168.1.1", "192.168.1.2", "192.168.1.3"]
env.roledefs = {"A": ["192.168.1.1", "192.168.1.2"], "B":["192.168.1.3"] }

try:
    execute(rcmd, "uname -a", roles = ["A", "B"])
finally:
    disconnect_all()

顏色

fabric.colors 提供了一些顏色包裝函數(shù),可配合 print 顯示一些需要特別注意的信息。

from fabric.colors import *
print(green("This text is green"))

上下文

fabric.context_managers 為命令提供區(qū)域設(shè)置。

  • cd: 切換主機(jī)工作目錄。
  • lcd: 切換本地目錄。
  • hide: 隱藏輸出信息。
  • quiet: 安靜模式,hide('everything'), warn_only=True。
  • path: 修改 PATH 環(huán)境變量,可選 append 或 prepend。

切換到合適的工作目錄,減少命令行輸入。

with cd("/etc"):
run("pwd")   # /etc
with cd ("init.d"):
run("pwd")   # /etc/init.d

操作

fabric.operations 包含用于任務(wù)的一些命令。

  • get: 下載文件。
  • put: 上傳文件。
  • run: 運(yùn)行遠(yuǎn)程命令。
  • sudo: 以超級用戶執(zhí)行命令。
  • local: 運(yùn)行本地命令。
  • prompt: 用戶輸入。
  • open_shell: 遠(yuǎn)程交互式環(huán)境。
  • reboot: 重啟主機(jī)。

最常用的是 run 命令,它執(zhí)行遠(yuǎn)程命令,返回輸出結(jié)果字符串。該字符串對象還有 failed、succeeded、 return_code、command、real_command 等屬性用來檢查運(yùn)行結(jié)果。

out = run("uname -a")
print out.succeeded, out.failed, out.return_code
print out.command, out.real_command

其他

fabric.utils 提供了一些輔助操作。

  • abort: 引發(fā)異常,終止任務(wù)執(zhí)行。
  • warn: 顯示警告信息,但不終止。
  • indent: 獲取一個(gè)縮進(jìn)字符串。
  • fastprint, puts: 顯示信息。

fabric.contrib.console 提供 confirm 函數(shù),讓用戶輸入 [Y/n] 確認(rèn)信息。

if confirm("Continue", default = False):
    out = run("uname -a")

fabric.contrib.files 提供了遠(yuǎn)程文件操作功能。

  • append: 添加信息。
  • comment: 按條件注釋掉某些內(nèi)容。
  • contains: 是否包含特定內(nèi)容。
  • exists: 路徑是否存在。

問題

(1) 對后臺(tái)運(yùn)行命令 nohup 支持不好,可以考慮用 screen、pexpect 等代替。

$ screen -d -m -S <session_name> [cmd args]; sleep 5

注意用 sleep 暫停,避免 screen 尚未運(yùn)行,會(huì)話就結(jié)束。

(2) 用 open_shell 進(jìn)入交互模式,Ctrl+C 導(dǎo)致 fabric 進(jìn)程退出,而不是遠(yuǎn)程進(jìn)程。#