Python自動化神器-Fabric

{"type":"doc","content":[{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#48b378","name":"user"}}],"text":"什麼是 Fabric","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","text":"Fabric","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":" 是一款可以實現遠程執行命令和完成操作的庫,相比 ","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"Pramiko","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":",","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"Fabric","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":" 更加簡潔,高效和易用。它提供了很多開箱即用的功能,可以幫助開發者快速實現自動化任務。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#48b378","name":"user"}}],"text":"常用的方法","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#48b378","name":"user"}}],"text":"什麼是 local 方法","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","text":"local","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":" 方法可以實現在本地執行命令,和 ","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"Python","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":" 的 ","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"os.system()","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":"作用一樣。整體感覺功能強大,使用簡單。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#48b378","name":"user"}}],"text":"Demo-1","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此 ","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"demo","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":" 實現在本地主機上執行命令查看 ","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"hostname","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":"。","attrs":{}}]},{"type":"codeblock","attrs":{"lang":null},"content":[{"type":"text","text":"from fabric.api import *\n\nenv.user='root'\nenv.password='pwd@123'\nenv.hosts=['10.x.x.1','10.x.x.2']\n\ndef exec_local():\n    local('hostname')\n\nif __name__ == '__main__':\n    import os,sys\n    cmd='fab -f {} exec_local'.format(sys.argv[0])\n    os.system(cmd)\n","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"執行結果:","attrs":{}}]},{"type":"codeblock","attrs":{"lang":null},"content":[{"type":"text","text":"PS C:\\> python test.py\n[10.x.x.1] Executing task 'exec_local'\n[localhost] local: hostname\nLenovo-PC-I7-64G\n[10.x.x.2] Executing task 'exec_local'\n[localhost] local: hostname\nLenovo-PC-I7-64G\n\nDone.\n","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#48b378","name":"user"}}],"text":"單次執行","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"以上,我們可以看到 ","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"hostname","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":" 的命令執行了兩次,因爲我們的主機有 ","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"2","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":" 個。那如果我們想要某個命令只在第一臺主機上執行,怎麼做呢?","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"Fabric","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":" 爲我們提供了 ","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"runs_once","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":" 裝飾器來幫我們解決這個問題。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#48b378","name":"user"}}],"text":"Demo-2","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"代碼:","attrs":{}}]},{"type":"codeblock","attrs":{"lang":null},"content":[{"type":"text","text":"from fabric.api import *\n\nenv.user='root'\nenv.password='Panyun@123'\nenv.hosts=['10.135.3.3','10.135.3.22']\n\n@runs_once\ndef exec_local():\n    local('hostname')\n\nif __name__ == '__main__':\n    import os,sys\n    cmd='fab -f {} exec_local'.format(sys.argv[0])\n    os.system(cmd)\n","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"執行結果:","attrs":{}}]},{"type":"codeblock","attrs":{"lang":null},"content":[{"type":"text","text":"PS C:\\> python test.py\n[10.x.x.1] Executing task 'exec_local'\n[localhost] local: hostname\nLenovo-PC-I7-64G\n\nDone.\n","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#48b378","name":"user"}}],"text":"什麼是 run 方法","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","text":"run","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":" 方法可以實現在遠端主機執行命令,可以和 ","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"paramiko","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":" 的 ","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"exec_command","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":" 實現同樣的功能。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#48b378","name":"user"}}],"text":"Demo-1","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此 ","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"demo","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":" 實現在遠端主機執行 ","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"hostname","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":" 命令。","attrs":{}}]},{"type":"codeblock","attrs":{"lang":null},"content":[{"type":"text","text":"from fabric.api import *\n\nenv.user='root'\nenv.password='pwd@123'\nenv.hosts=['10.x.x.1','10.x.x.2']\n\ndef exec_local():\n    local('hostname')\n\nif __name__ == '__main__':\n    import os,sys\n    cmd='fab -f {} exec_local'.format(sys.argv[0])\n    os.system(cmd)\n","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"執行結果:","attrs":{}}]},{"type":"codeblock","attrs":{"lang":null},"content":[{"type":"text","text":"PS C:\\> python test.py\n[10.x.x.1] Executing task 'exec_local'\n[10.x.x.1] run: hostname\n[10.x.x.1] out: ubuntu\n[10.x.x.1] out:\n\n[10.x.x.2] Executing task 'exec_local'\n[10.x.x.2] run: hostname\n[10.x.x.2] out: centos\n[10.x.x.2] out:\n\n\nDone.\nDisconnecting from 10.x.x.1... done.\nDisconnecting from 10.x.x.2... done.\n","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#48b378","name":"user"}}],"text":"什麼是 put 方法","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","text":"put","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":" 方法可以實現將本地文件上傳的遠端的功能。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#48b378","name":"user"}}],"text":"Demo-1","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此 ","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"demo","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":" 實現將本地主機的文件上傳到遠端主機。","attrs":{}}]},{"type":"codeblock","attrs":{"lang":null},"content":[{"type":"text","text":"from fabric.api import *\n\nenv.user='root'\nenv.password='pwd@123'\nenv.hosts=['10.x.x.1','10.x.x.2']\n\ndef put_file():\n    put('empty.ok','/home/ok.empty')\n\nif __name__ == '__main__':\n    import os,sys\n    cmd='fab -f {} put_file'.format(sys.argv[0])\n    os.system(cmd)\n","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"執行結果:","attrs":{}}]},{"type":"codeblock","attrs":{"lang":null},"content":[{"type":"text","text":"PS C:\\> python test.py\n[10.x.x.1] Executing task 'put_file'\n[10.x.x.1] put: empty.ok -> /home/ok.empty\n[10.x.x.2] Executing task 'put_file'\n[10.x.x.2] put: empty.ok -> /home/ok.empty\n\nDone.\nDisconnecting from 10.x.x.1... done.\nDisconnecting from 10.x.x.2... done.\n","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"查看上傳到遠端主機的文件:","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/3f/3f8bdf910e57c08da1779358ce21828d.png","alt":"","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#48b378","name":"user"}}],"text":"什麼是 prompt 方法","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"codeinline","content":[{"type":"text","text":"prompt","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":" 方法可以獲取用戶輸入,從而實現動態參數注入、交互式輸入等功能。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#48b378","name":"user"}}],"text":"Demo-1","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此 ","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"demo","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":" 實現在遠端主機執行 ","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"echo","attrs":{}}],"marks":[{"type":"color","attrs":{"color":"#28ca71","name":"user"}}],"attrs":{}},{"type":"text","text":" 命令,根據用戶輸入而輸出。","attrs":{}}]},{"type":"codeblock","attrs":{"lang":null},"content":[{"type":"text","text":"from fabric.api import *\n\nenv.user='root'\nenv.password='pwd@123'\nenv.hosts=['10.x.x.1','10.x.x.2']\n\ndef exec_local():\n    local('hostname')\n\ndef echo_some():\n    msg=prompt('Please input msg:')\n    run('hostname && echo {}'.format(msg))\n\nif __name__ == '__main__':\n    import os,sys\n    cmd='fab -f {} echo_some'.format(sys.argv[0])\n    os.system(cmd)\n","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"執行結果:","attrs":{}}]},{"type":"codeblock","attrs":{"lang":null},"content":[{"type":"text","text":"PS C:\\> python test.py\n[10.x.x.1] Executing task 'echo_some'\nPlease input msg: phyger\n[10.x.x.1] run: hostname && echo phyger\n[10.x.x.1] out: ubuntu\n[10.x.x.1] out: phyger\n[10.x.x.1] out:\n\n[10.x.x.2] Executing task 'echo_some'\nPlease input msg: niubi\n[10.x.x.2] run: hostname && echo niubi\n[10.x.x.2] out: centos\n[10.x.x.2] out: niubi\n[10.x.x.2] out:\n\n\nDone.\nDisconnecting from 10.x.x.1... done.\nDisconnecting from 10.x.x.2... done.\n","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"更多內容請移步Fabric官網。","attrs":{}}]},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#6a737d","name":"user"}}],"text":"https://fabric-chs.readthedocs.io/zh_CN/chs/","attrs":{}}]}],"attrs":{}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章