paramiko修改本分原始碼

2022-07-04 02:24:09 字數 2154 閱讀 4626

環境:python3

使用的是 demos這個資料夾

2.1 windwos使用paramiko

切換到demos資料夾下 

g:\python\untitled\study13\demos>python demo.py

#報錯file "g:\python\untitled\study13\demos\interactive.py", line 84, in writeall

sys.stdout.write(data)

typeerror: write() argument must be str, not bytes

# python3中socket傳輸是bytes型別,而這邊接收的是str型別

修改報錯的  interactive.py , line 84

def writeall(sock):

while true:

data = sock.recv(256)

if not data:

sys.stdout.write('\r\n*** eof ***\r\n\r\n')

sys.stdout.flush()

break

sys.stdout.write(data.decode()) # 將原本的data 解碼

sys.stdout.flush()

# data.decode() 即可

改完之後,輸入ip 和 密碼可以登入了

從上圖可以看出,通過paramiko中的demo.py 連線伺服器,執行的命令是從「here we go」 後面正式開始的,也就是在此之後的命令是通過paramiko封裝的,用以發往不同的伺服器。所以我們需要找到這個位置,檢視它們的原始碼。

chan = t.open_session()

chan.get_pty()

chan.invoke_shell()

print('*** here we go!\n')

interactive.interactive_shell(chan)

chan.close()

t.close()

# 可以看到 print('*** here we go!\n') 後面

# 執行的乙個函式 interactive.interactive_shell(chan)

# 所以要去看這個函式寫的什麼

修改interactive_shell(chan) 中 posix_shell(chan)函式, 以記錄所有輸入的字元(命令)

cmd =   # 定義乙個空列表,記錄所有輸入的字元

while true:

r, w, e = select.select([chan, sys.stdin], , )

if chan in r:

try:

x = u(chan.recv(1024))

if len(x) == 0:

sys.stdout.write('\r\n*** eof\r\n')

break

sys.stdout.write(x)

sys.stdout.flush()

except socket.timeout:

pass

if sys.stdin in r:

x = sys.stdin.read(1)

if len(x) == 0:

break

if x == "\r": # 回車表示一條命令輸入完成

cmd_str = "".join(cmd) # 拼接命令

print('\n' + '-->' + cmd_str)

cmd = # 清空cmd列表

else:

chan.send(x)

finally:

termios.tcsetattr(sys.stdin, termios.tcsadrain, oldtty)

在linux伺服器上測試

這樣輸入的命令已經可以看到了。

weka原始碼去gui版本分享

因為專案需要引入weka,但是weka中包含的東西太多,特別是gui這一塊太大了。我們只需要用到裡面的randomforest,於是對原始碼進行了一些刪減,出來了這樣乙個去gui版本。主要是去掉了gui相關 及資源,lib中移除了幾個非必須jar包,少量地方做了移除gui後的處理 對演算法功能無影響...

pppd 原始碼修改1

1.pppd撥號成功後,會將解析到的dns伺服器ip位址,寫入 etc ppp resolv.conf 這樣的話,gethostbyname r並不會識別,並且,如果有啟動兩路pppd的話,後面一路會將resolv.conf檔案重寫。因此,這塊 需要修改。在pppd ipcp.c檔案中,修改crea...

如何修改iview原始碼

前情提要 做的乙個需求是想要滑鼠進入彈框便不消失,移出滑鼠彈框消失 即iview的 notice 仔細檢視了iview notice模組發現並不支援此功能 因此 只能自己嘗試修改iview源 以下修改流程以修改notice為例 首先將iview的官方原始碼庫clone下來 cd iview git ...