国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python調用python腳本時參數的傳遞

yankeys / 1970人閱讀

摘要:前言為什么有調用腳本呢直接不就行了嗎這里主要是用于遠程調用時這種調用在運維場景中是比較多的,類似下面這樣的調用遠程調用這里有個問題就是傳遞較多參數時如何傳遞比如傳遞字典傳遞列表等我們可以發現,如果直接傳遞,往往傳過去后不能很好的解析因為這

前言:

為什么有python調用python腳本呢?直接import不就行了嗎?
這里主要是用于遠程調用時,這種調用在運維場景中是比較多的,類似下面這樣的調用

   server.py  遠程調用->   agent.py

這里有個問題,就是傳遞較多參數時,如何傳遞,比如傳遞字典,傳遞列表等,
我們可以發現,如果直接傳遞,往往傳過去后不能很好的解析,因為這樣直接調用,
agent.py在使用sys.argv解析時,獲得的是列表,列表里面是字符串

如何解決?

解決方法就是將要傳遞的參數拆解成字符串,以特殊字符隔開,agen.py解析時候,再拆解回來

實例

1、server.py

#-*- coding:utf8 -*- 
import paramiko
script_path = "/data/test"

# 需要傳遞的參數
arg_a = 1000           #數字
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"}   #字典

# 將數字變為字符串
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)

# 組合傳遞參數
args = "{0}|{1}|{2}|{3}".format(
    arg_a,
    arg_b,
    arg_c_str,
    arg_d_str
)
# 這里輸出的內容為:
#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

# 遠程調用一般使用paramiko,這里使用commands演示
status, result = commands.getstatusoutput(command)

2、agent.py

#-*- coding:utf8 -*-

import sys

args = sys.argv[1]
args_list = args.split("|")

# 處理數字參數
arg_a = int(args_list[0])

# 處理字符串參數
arg_b = str(args_list[1])

# 處理列表參數
arg_c_list = args_list[2].split(",")

# 處理字典參數
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

執行結果:

結語

如果有更好的方式,麻煩留言,這樣在傳遞參數的過程中少了很多解析工作.當然這里僅作為在運維編寫腳本時候常用到,也不失為一種學習字符串拆解的實際例子

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44420.html

相關文章

  • Python和SQL Server 2017強大功能

    摘要:它主要是為了允許在中使用基于的機器學習,但是它可以與任何庫或框架一起使用。已經通過啟用服務器通過使用的機器學習服務在中執行腳本,添加到其高級分析擴展,現在稱為機器學習服務。存儲的實例必須安裝具有的機器學習服務要在中使用執行腳本,應運行或。 Python和SQL Server 2017的強大功能 Python是SQL Server 2017的新功能。它主要是為了允許在SQLServer中...

    everfight 評論0 收藏0
  • 100 個基本 Python 面試問題第二部分(21-40)

    摘要:為我們提供了許多內置函數,例如并提供了創建用戶定義函數的能力。會將該變量視為函數級作用域中的局部變量。回到目錄中函數的用途是什么是中的內置函數之一。請注意,這種類型的參數語法不允許將命名參數傳遞給函數。函數接受一個稱為的可選參數。 ...

    2450184176 評論0 收藏0
  • python模塊之sys

    摘要:返回的信息特定于當前線程以及當前堆棧幀。出于某些原因,這個值可能無法計算,將返回返回安卓版本的構建時間,以整數表示。僅適用于安卓平臺返回解釋器的檢查間隔。可操作此屬性實現強制重新加載模塊等。 sys模塊提供對由解釋器使用或維護的某些變量、與解釋器交互的函數的訪問接口。 sys.abiflags 在使用標準configure腳本構建python的POSIX系統上,該屬性包含了PEP 31...

    csRyan 評論0 收藏0
  • Python-爬蟲工程師-面試總結

    摘要:內存池機制提供了對內存的垃圾收集機制,但是它將不用的內存放到內存池而不是返回給操作系統。為了加速的執行效率,引入了一個內存池機制,用于管理對小塊內存的申請和釋放。 注:答案一般在網上都能夠找到。1.對if __name__ == main的理解陳述2.python是如何進行內存管理的?3.請寫出一段Python代碼實現刪除一個list里面的重復元素4.Python里面如何拷貝一個對象?...

    antz 評論0 收藏0
  • Blender Python API概述

    摘要:在交互式控制臺中運行此操作時,您將看到視口更新。鍵入或粘貼到交互式控制臺中。用戶首選項加載項列表使用顯示有關每個加載項的信息。最后兩行僅用于測試這允許腳本直接在文本編輯器中運行以測試更改。 Blender Python API概述 本文檔的目的是解釋Python和Blender如何組合在一起,涵蓋了一些在閱讀API參考和示例腳本時可能不明顯的功能。 Python in Blender ...

    魏憲會 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<