2011-05-02 23 views
1

我正在爲Minecraft服務器創建一個包裝器,該服務器應該從名爲命令的目錄中接收新命令,該命令包含命令後命名的文件,全部包含用於組成該命令的服務器命令。例如,下面的片段是從定義「告訴」命令文件:Python:將列表中的項目替換爲字符串的高效方法

tell <1> <sender> says: <2> 

內部,包裝讀取服務器進程的標準輸出,尋找跡象表明,用戶正在運行的命令。然後它分割命令,從中取出名爲「發送者」的名稱,顯然是發送命令的人,「command」是指示該命令的一個字符串,以及一個名爲args的列表,其中包含參數跟在命令字符串之後。例如,tell命令的語法是這樣的:

tell jim hello 

導致以下名稱:

sender = s0lder 
command = tell 
args = ['jim', 'hello'] 

我的問題是,假設上面的例子中,我怎麼能做出最終的字符串,說「輸出」,讀作:

tell jim s0lder says: hello 

我需要一個基本方式,通過對被括號中定義字符串所包圍的區域,與相應的名稱/中的args列表中的項目,以便:

<sender> = sender 
<1> = args[0] 
<2> = args[1] 

等等,用於args列表中的所有項目。謝謝。

+0

發佈您已經嘗試過的代碼以及失敗的代碼。 – Daenyth 2011-05-02 20:35:09

回答

0

如果你可以改變格式字符串一點點生活,內置format功能應該是相當足夠了:

args = ["jim", "hello"] 
kwargs = {"sender": "s0lder"} 
print("tell {0} {sender} says: {1}".format(*args, **kwargs)) 

輸出

tell jim s0lder says: hello 
1

這裏是那並不是一個解決方案t要求你改變你的格式(這一切都以編程方式完成)。

sender = 's0lder' 
args = ['jim', 'hello'] 

format = "tell <1> <sender> says: <2>".replace("<", "%(<").replace(">", ">)s") 
# format == 'tell %(<1>)s %(<sender>)s says: %(<2>)s' 
subs = {"<sender>": sender, "<1>": args[0], "<2>": args[1]} 
print format % subs 
# 'tell jim s0lder says: hello' 
相關問題