Pythonの研究ノート - 自動展開初心者が学ぶことができます[]

 

 

ディレクトリ

pexpect

ファブリック


pexpect

Pexpectは、Pythonのドン・リブス実装の言語がある期待し、ルーチンを開始し、Pythonモジュールのその自動相互作用を達成するために、プログラム出力に固有の応答を作るために正規表現を使用するために使用されます。Pexpect広い範囲、それはSSHを使用して自動的に対話するために使用することができ、FTP、telnetや手続き等;自動的に使用できるソフトウェアのインストールパッケージをコピーして、自動的に別のマシンにインストールされ、ソフトウェアのテストやコマンドラインインタラクティブにも使用することができます自動化。もちろん、あなたが自動化を学んでいない場合、ドレスのPythonの交換小さなシリーズ行くことをお勧めします。変換を見つけることができる思考の流れ(デジタル同音異義語)下にしながら、長い時間をし、彼らの武器、新しいPythonのチュートリアルプロジェクト、より多くの交流の進展があります速いです

  1.  
    輸入pexpect
  2.  
    輸入SYS
  3.  
     
  4.  
    子= pexpect.spawn( 'sshの[email protected]')
  5.  
    child.logfile = sys.stdoutの
  6.  
    #fout =ファイル( 'mylog.txt'、 'W')
  7.  
    #child.logfile = FOUT
  8.  
    child.expect( 'パスワード:')
  9.  
    child.sendline( 'std20')
  10.  
    child.expect( 'std20。*')
  11.  
    child.sendline( 'LS /')
  12.  
    child.expect( 'std20。*')
  13.  
    child.sendline( '終了')
  1.  
    #コーディング= UTF_8
  2.  
     
  3.  
    pexpect輸入pxsshから
  4.  
    輸入SYS
  5.  
     
  6.  
    S = pxssh.pxssh()
  7.  
    s.logfile = sys.stdoutの
  8.  
    ホスト名= '123.57.211.212'
  9.  
    ユーザ名= 'std20'
  10.  
    パスワード= 'std20'
  11.  
    s.login(ホスト名、ユーザ名、パスワード)
  12.  
    s.sendline( 'LS /')
  13.  
    s.prompt()#プロンプトマッチングシステム
  14.  
    s.sendline( 'whoamiは')
  15.  
    s.prompt()
  16.  
    s.logout()

ファブリック

公開とプロジェクトの運用・保守作業は非常に機械的で、非常に高い周波数、リピートオーダーの多くをノック時間を無駄につながります。

どのようなバグの修正、リポジトリ(2分)を提出、テスト、テスト環境の展開(2分)を引っ張るためのSSH、rsyncの線機A、B、C、D、E(1分)、それぞれABCDE 5へのSSHに機械、1回の再起動(8-10分)ずつ= 13-15分

落ち込んで、各操作は、同じコマンドと同じで、複数のマシン上の悪いことに、マシンでスクリプトを取得することは困難であり、主な時間は、SSH、タイプのコマンドに浪費し、スクリプトを書いている、完全にされています結果を見るために2分かかり、実行するための鍵となることがあります。

インストール

ピップ生地をインストール

入門例

  1.  
    #fabfile.py
  2.  
    fabric.apiインポートの実行から
  3.  
     
  4.  
    デフhost_type():
  5.  
    実行( 'のuname -s')

スタート

  1.  
    itcast @ Ubuntuの:〜/ tmpに/ FAB $ファブ-H 127.0.0.1 host_type
  2.  
    [127.0.0.1]実行中のタスク 'host_type'
  3.  
    [127.0.0.1]の実行:のuname -s
  4.  
    [127.0.0.1] 'itcast' のログインパスワード:
  5.  
    [127.0.0.1]アウト:Linuxの
  6.  
    [127.0.0.1]アウト:
  7.  
     
  8.  
     
  9.  
    完了。
  10.  
    127.0.0.1から切断...完了。
  11.  
    itcast @ Ubuntuの:〜/ tmpに/ FAB $ファブ-H 127.0.0.1 host_type
  12.  
    [127.0.0.1]実行中のタスク 'host_type'
  13.  
    [127.0.0.1]の実行:のuname -s
  14.  
    [127.0.0.1] 'itcast' のログインパスワード:
  15.  
    [127.0.0.1]アウト:Linuxの
  16.  
    [127.0.0.1]アウト:

ファブリック一般的に使用されるパラメータ

  • -l:表示タスク定義された関数名
  • -f:指定工場の入り口のファイルは、デフォルトのファイル名はfabfile.pyエントリです
  • -H:指定ターゲットホスト、分周なし「」により、複数のホスト

ファブリック一般的に使用されるAPI

  • ローカル(「のuname -s」):ローカル:のようなローカル・コマンドの実行、
  • LCD:ローカルディレクトリを切り替える、といった:LCD( '/ホーム')
  • CD:のような、リモートディレクトリを切り替える:CD( '/など')
  • 実行次のようなリモートコマンド実行、:実行(「無料-m」)
  • 須藤:須藤(「タッチ/ ABC」):須藤リモートようなコマンドを実行します
  • 置く:リモートホストにローカルファイルをアップロードする、といった:PUT(「/ハロー」、「/ホーム/ itcast /ハロー」)
  • 取得:GET(「/ホーム/パイソン/世界」、「/ホーム/ itcast /世界」):のようなダウンロード・ファイル、リモートからローカルホストに、
  • リブート:リブートリモートホスト、例えば:リブート()
  • @task:装飾的な機能、非標識Fabには見えない呼び出し可能なファブを識別するための機能、純粋のビジネスロジック
  • @runs_once:一度だけ識別機能関数デコレータ、ではなく、複数のホストの影響

ファブリックは、グローバルプロパティを設定します

  • env.host:ターゲットホストの定義、例えば:env.host = [ '192.168.17.192'、 '192.168.17.193']
  • env.user:ユーザー定義の名前、など:env.user =「ルート」
  • env.port:よう、デフォルトでは22、ターゲットホストポートを定義する:env.port =「22」
  • env.password:env.password = "chuanzhi":のような、パスワードを定義します
  • env.passwords = env.passwords:などの異なる宿主パスワード、{ '[email protected]:22': 'chuanzhi'、 '[email protected]:22': 'のpython'}

例1:動的には、リモートディレクトリ一覧を取得します

  1.  
    fabric.apiインポートから*
  2.  
     
  3.  
    env.hosts = [ '192.168.17.192'、 '192.168.17.193']
  4.  
    #env.password = 'のpython'
  5.  
    env.passwords = {
  6.  
    '[email protected]:22': 'のpython'、
  7.  
    '[email protected]:22': 'のpython'、
  8.  
    }
  9.  
     
  10.  
    @runs_once
  11.  
    デフ)(input_raw:
  12.  
    返すプロンプト(「入力してくださいディレクトリ名:」、デフォルト=「/ホーム」)
  13.  
     
  14.  
    デフworkask(dirnameは):
  15.  
    実行( 'LS -l' +のdirname)
  16.  
     
  17.  
    @仕事
  18.  
    デフ行きます():
  19.  
    印刷( '開始...')
  20.  
    getdirname = input_raw()
  21.  
    workask(getdirname)
  22.  
    印刷( '末端...')

例2:アップロードしたファイルと実行

  1.  
    fabric.apiインポートから*
  2.  
     
  3.  
    env.user = 'itcast'
  4.  
    env.hosts = [ '192.168.17.192'、 '192.168.17.193']
  5.  
    env.password = 'のpython'
  6.  
     
  7.  
    @仕事
  8.  
    @runs_once
  9.  
    デフtar_task():
  10.  
    LCD( '/ホーム/ itcast / testdemo')を持ちます:
  11.  
    ローカル( 'タールzcvf demo.tar.gz demo.py')
  12.  
     
  13.  
    @仕事
  14.  
    デフput_task():
  15.  
    実行( 'ます。mkdir -p /ホーム/ itcast / testdemo')
  16.  
    CD( '/ホーム/ itcast / testdemo')を持ちます:
  17.  
    置く( '/ホーム/ itcast / testdemo / demo.tar.gz'、 '/home/itcast/testdemo/demo.tar.gz')
  18.  
     
  19.  
    @仕事
  20.  
    デフcheck_task():
  21.  
    lmd5 =ローカル( 'のmd5sum /home/itcast/testdemo/demo.tar.gz'、捕捉= TRUE).split(」「)[0]
  22.  
    rmd5 =ラン( 'のmd5sum /home/itcast/testdemo/demo.tar.gz')。スプリット(」「)[0]
  23.  
    lmd5 == rmd5場合:
  24.  
    印刷( 'OK ...')
  25.  
    他:
  26.  
    印刷( 'ERROR ...')
  27.  
     
  28.  
    @仕事
  29.  
    デフ)(run_task:
  30.  
    CD( '/ホーム/ itcast / testdemo')を持ちます:
  31.  
    ( '-zxvf demo.tar.gzを取る')を実行
  32.  
    ( 'Pythonのdemo.py')を実行します
  33.  
     
  34.  
    @仕事
  35.  
    デフ行きます():
  36.  
    tar_task()
  37.  
    put_task()
  38.  
    check_task()
  39.  
    run_task()

コードの自動展開

  1.  
    fabric.apiインポートから*
  2.  
     
  3.  
    env.user = 'itcast'
  4.  
    env.hosts = [ '192.168.17.192'、 '192.168.17.193']
  5.  
    env.password = 'のpython'
  6.  
     
  7.  
    @runs_once
  8.  
    @仕事
  9.  
    デフlocal_update():
  10.  
    LCD付き( "/ホーム/ itcastを/ tmp / itcasthello"):
  11.  
    ローカル( "-Aを追加GIT")
  12.  
    ローカル( " '更新' を-mコミットGIT")
  13.  
    ローカル(「gitのプル原点マスター」)
  14.  
    ローカル(「gitのプッシュ原点マスター」)
  15.  
     
  16.  
     
  17.  
    @仕事
  18.  
    デフremote_update():
  19.  
    CD付き( "/ホーム/ itcastを/ tmp / itcasthello"):
  20.  
    (「gitのチェックアウトマスター」)を実行します
  21.  
    (「gitのプル原点マスター」)を実行します
  22.  
     
  23.  
    @仕事
  24.  
    デフデプロイ():
  25.  
    local_update()
  26.  
    remote_update()
 

おすすめ

転載: www.cnblogs.com/chengxuyuanaa/p/12013740.html