摘要:前言為什么有調(diào)用腳本呢直接不就行了嗎這里主要是用于遠(yuǎn)程調(diào)用時這種調(diào)用在運(yùn)維場景中是比較多的,類似下面這樣的調(diào)用遠(yuǎn)程調(diào)用這里有個問題就是傳遞較多參數(shù)時如何傳遞比如傳遞字典傳遞列表等我們可以發(fā)現(xiàn),如果直接傳遞,往往傳過去后不能很好的解析因?yàn)檫@
前言:
為什么有python調(diào)用python腳本呢?直接import不就行了嗎?
這里主要是用于遠(yuǎn)程調(diào)用時,這種調(diào)用在運(yùn)維場景中是比較多的,類似下面這樣的調(diào)用
server.py 遠(yuǎn)程調(diào)用-> agent.py
這里有個問題,就是傳遞較多參數(shù)時,如何傳遞,比如傳遞字典,傳遞列表等,
我們可以發(fā)現(xiàn),如果直接傳遞,往往傳過去后不能很好的解析,因?yàn)檫@樣直接調(diào)用,
agent.py在使用sys.argv解析時,獲得的是列表,列表里面是字符串
解決方法就是將要傳遞的參數(shù)拆解成字符串,以特殊字符隔開,agen.py解析時候,再拆解回來
實(shí)例1、server.py
#-*- coding:utf8 -*- import paramiko script_path = "/data/test" # 需要傳遞的參數(shù) arg_a = 1000 #數(shù)字 arg_b = "anymore" #字符串 arg_c = ["192.168.0.1","192.168.0.2","192.168.0.3"] #列表 arg_d = {"a":"5","b":"10","c":"11"} #字典 # 將數(shù)字變?yōu)樽址?arg_a = str(arg_a) # 拆解列表arg_c arg_c_str = ",".join(arg_c) # 拆解字典arg_d arg_d_list = [] for k,v in arg_d.items(): tmp_str = "%s:%s"%(k,v) arg_d_list.append(tmp_str) arg_d_str = ",".join(arg_d_list) # 組合傳遞參數(shù) args = "{0}|{1}|{2}|{3}".format( arg_a, arg_b, arg_c_str, arg_d_str ) # 這里輸出的內(nèi)容為: #1000|anymore|192.168.0.1,192.168.0.2,192.168.0.3|a:5,c:11,b:10 print args command = "python {0}/a.py "{1}"".format( script_path, args ) s = paramiko.SSHClient() s.load_system_host_keys() s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) s.connect("ssh host", "ssh port", "ssh user", "ssh password", timeout=15) stdin,stdout,stderr = s.exec_command(command) stdout,stderr = stdout.read(),stderr.read() print stdout, stderr # 遠(yuǎn)程調(diào)用一般使用paramiko,這里使用commands演示 status, result = commands.getstatusoutput(command)
2、agent.py
#-*- coding:utf8 -*- import sys args = sys.argv[1] args_list = args.split("|") # 處理數(shù)字參數(shù) arg_a = int(args_list[0]) # 處理字符串參數(shù) arg_b = str(args_list[1]) # 處理列表參數(shù) arg_c_list = args_list[2].split(",") # 處理字典參數(shù) arg_d_list = args_list[3].split(",") arg_d_dic = {} for i in arg_d_list: tmp = i.split(":") arg_d_dic[tmp[0]] = tmp[1] print arg_a print arg_b print arg_c_list print arg_d_dic
執(zhí)行結(jié)果:
結(jié)語如果有更好的方式,麻煩留言,這樣在傳遞參數(shù)的過程中少了很多解析工作.當(dāng)然這里僅作為在運(yùn)維編寫腳本時候常用到,也不失為一種學(xué)習(xí)字符串拆解的實(shí)際例子
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44420.html
摘要:它主要是為了允許在中使用基于的機(jī)器學(xué)習(xí),但是它可以與任何庫或框架一起使用。已經(jīng)通過啟用服務(wù)器通過使用的機(jī)器學(xué)習(xí)服務(wù)在中執(zhí)行腳本,添加到其高級分析擴(kuò)展,現(xiàn)在稱為機(jī)器學(xué)習(xí)服務(wù)。存儲的實(shí)例必須安裝具有的機(jī)器學(xué)習(xí)服務(wù)要在中使用執(zhí)行腳本,應(yīng)運(yùn)行或。 Python和SQL Server 2017的強(qiáng)大功能 Python是SQL Server 2017的新功能。它主要是為了允許在SQLServer中...
摘要:為我們提供了許多內(nèi)置函數(shù),例如并提供了創(chuàng)建用戶定義函數(shù)的能力。會將該變量視為函數(shù)級作用域中的局部變量?;氐侥夸浿泻瘮?shù)的用途是什么是中的內(nèi)置函數(shù)之一。請注意,這種類型的參數(shù)語法不允許將命名參數(shù)傳遞給函數(shù)。函數(shù)接受一個稱為的可選參數(shù)。 ...
摘要:返回的信息特定于當(dāng)前線程以及當(dāng)前堆棧幀。出于某些原因,這個值可能無法計(jì)算,將返回返回安卓版本的構(gòu)建時間,以整數(shù)表示。僅適用于安卓平臺返回解釋器的檢查間隔??刹僮鞔藢傩詫?shí)現(xiàn)強(qiáng)制重新加載模塊等。 sys模塊提供對由解釋器使用或維護(hù)的某些變量、與解釋器交互的函數(shù)的訪問接口。 sys.abiflags 在使用標(biāo)準(zhǔn)configure腳本構(gòu)建python的POSIX系統(tǒng)上,該屬性包含了PEP 31...
摘要:內(nèi)存池機(jī)制提供了對內(nèi)存的垃圾收集機(jī)制,但是它將不用的內(nèi)存放到內(nèi)存池而不是返回給操作系統(tǒng)。為了加速的執(zhí)行效率,引入了一個內(nèi)存池機(jī)制,用于管理對小塊內(nèi)存的申請和釋放。 注:答案一般在網(wǎng)上都能夠找到。1.對if __name__ == main的理解陳述2.python是如何進(jìn)行內(nèi)存管理的?3.請寫出一段Python代碼實(shí)現(xiàn)刪除一個list里面的重復(fù)元素4.Python里面如何拷貝一個對象?...
摘要:在交互式控制臺中運(yùn)行此操作時,您將看到視口更新。鍵入或粘貼到交互式控制臺中。用戶首選項(xiàng)加載項(xiàng)列表使用顯示有關(guān)每個加載項(xiàng)的信息。最后兩行僅用于測試這允許腳本直接在文本編輯器中運(yùn)行以測試更改。 Blender Python API概述 本文檔的目的是解釋Python和Blender如何組合在一起,涵蓋了一些在閱讀API參考和示例腳本時可能不明顯的功能。 Python in Blender ...
閱讀 2797·2021-09-23 11:44
閱讀 1684·2021-09-13 10:24
閱讀 2634·2021-09-08 09:36
閱讀 1241·2019-08-30 15:54
閱讀 2262·2019-08-30 13:54
閱讀 3323·2019-08-30 10:57
閱讀 1859·2019-08-29 18:43
閱讀 3627·2019-08-29 15:10