在docker容器的實際應用中,對於我這樣的測試來講
最頭疼的事情反而是有時候需要同時操作容器外和容器內
容器外給掛載的路徑rz文件,編譯服務(以供容器內啓動使用),查看日誌
而容器內則負責啓動服務,查看進程等操作
經常不小心操作錯誤
後來想到個解決方式就是像這樣
把容器外和容器內用標籤分開
並且給登入容器的配類似這樣的腳本
但到了後來,模擬的節點變多,容器越來越多
store這個容器已經多到了18個,還可能更多,這樣配置文件顯得非常麻煩
解決:
其實xshell是有會話文件的,一般在~/Documents/NetSarang Computer/6/Xshell/Sessions下面,或者windows下相當於C:\Users\用戶名\Documents/NetSarang Computer/6/Xshell/Sessions下面是會話文件的保存位置,文件後綴爲xsh
我比對了store0和store1的xsh文件,發現僅有這一行不一樣
ExpectSend_Send_0=docker exec -it nebula_store0 /bin/bash
這裏記錄的是具體的expect命令,我只需要批量修改這裏並且生成xsh文件就可以
把文件內容複製,放到python中,將命令用{}活化,再在循環裏用變量格式化文件名和文件內容
import codecs
model = """
[CONNECTION:PROXY]
Proxy=
# ......略
ExpectSend_Expect_0=]#
ExpectSend_Send_0=docker exec -it nebula_store{} /bin/bash
Library=0
# ......略
SendKeepAlive=0
KeepAlive=1
""".replace("\n", "\r\n")
for i in range(0, 18):
with open("新內網測試(store{}).xsh".format(i), "wb") as f:
f.write(codecs.BOM_UTF16_LE)
f.write(model.format(i).encode("utf-16le"))
print(i)
這裏有幾個注意的地方
1.用notepad++打開源文件,發現源文件使用的是CrLf格式(windows)的換行符,而python中多行文本換行符爲Lf,所以用’\r\n’來替換’\n’,把換行符替換爲CrLf
2.還是notepad++,發現源文件格式居然是。。usc-2 (即utf16) little endian編碼,而且還帶BOM。。。。。。
3.爲了避免解析上的問題,我們需要先將文本編碼爲utf16-le格式。然後在前面加上utf16-le的BOM(codecs模塊提供)。因爲BOM是二進制的,所以我們也使用二進制寫入模式’wb’打開文件,這樣正文文本就需要encode爲字節流纔行。
然後執行代碼,得到生成的xsh文件,粘貼到原來xshell會話存儲的地方
點擊xshell的會話列表即自動刷新