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

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

第三部分 擴(kuò)展庫(kù)

A. Fabric

通過(guò) 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: 是否跳過(guò)無(wú)法連接的主機(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: 以超級(jí)用戶執(zhí)行命令。
  • local: 運(yùn)行本地命令。
  • prompt: 用戶輸入。
  • open_shell: 遠(yuǎn)程交互式環(huán)境。
  • reboot: 重啟主機(jī)。

最常用的是 run 命令,它執(zhí)行遠(yuǎn)程命令,返回輸出結(jié)果字符串。該字符串對(duì)象還有 failed、succeeded、 return_code、command、real_command 等屬性用來(lái)檢查運(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: 路徑是否存在。

問(wèn)題

(1) 對(duì)后臺(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)程。#