2 回答

TA貢獻(xiàn)1876條經(jīng)驗 獲得超5個贊
這不是垃圾。這些是ANSI轉(zhuǎn)義碼,通常由終端客戶端解釋以漂亮地打印輸出。
如果服務(wù)器配置正確,則只有在使用交互式終端時,換句話說,如果您為會話請求了偽終端(如果要使會話自動化,則不應(yīng)該這樣做),您將獲得這些信息。
如果您使用了,則Paramiko會自動請求偽終端,SSHClient.invoke_shell因為這應(yīng)該用于實現(xiàn)交互式終端。另請參見如何在Python Paramiko中啟動沒有終端仿真的shell?
如果自動執(zhí)行遠(yuǎn)程命令,則最好使用SSHClient.exec_command,默認(rèn)情況下不會分配偽終端(除非您用get_pty=True參數(shù)覆蓋)。
stdin, stdout, stderr = client.exec_command('ls')
或作為一種解決方法,請參閱如何從python中的字符串中刪除ANSI轉(zhuǎn)義序列。
雖然那只是一個hack,可能還不夠。交互式終端可能會遇到其他問題,不僅是轉(zhuǎn)義序列。
您可能對“ Last login”消息和命令提示符(cli@BENU>)都不感興趣。您不會用來獲得這些exec_command。
最后,這u不是實際字符串值的一部分(請注意,它不在引號內(nèi))。這表明字符串值采用Unicode編碼。你想要那個!

TA貢獻(xiàn)1946條經(jīng)驗 獲得超4個贊
這實際上不是垃圾。該u字符串之前表示這是一個Unicode字符串。該\x1b[2J\x1b[1;1H是一個轉(zhuǎn)義序列。我不知道該怎么做,但是在我打印出來時似乎可以清除屏幕。
要了解我的意思,請嘗試以下代碼:
for string in output:
print string
添加回答
舉報