簡體   English   中英

使用帶有西里爾文輸出的 paramiko exec_command 時如何獲得正確的編碼輸出

[英]How to get right encoded output when using paramiko exec_command with cyrillic output

我正在使用paramikopython-3.7連接到遠程 RedHat 機器並在其上執行腳本。

我的python代碼(它在一個帶有self.logger的類方法中)看起來像這樣:

進口paramiko

client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(server_name, port=22, username=login, password=password, timeout=3) 
(_, stdout, stderr) = client.exec_command('/tmp/some_script.sh')
for line in stderr:
    self.logger.error(line)

如果執行的腳本/tmp/some_script.py不存在,那么在我的日志中我會收到下一行:

2019-04-16 18:03:05,528:ERROR: bash: /tmp/some_script.sh: ▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒ ▒▒▒ ▒▒▒▒▒▒▒▒

而如果我登錄到服務器並嘗試該命令,它將返回西里爾文:

-bash: /tmp/some_script.sh: Нет такого файла или каталога

該消息的意思是“沒有這樣的文件或目錄”

我試圖用self.logger.error(line.encode('utf-8'))替換self.logger.error(line)行,但輸出如下所示:

2019-04-16 18:22:02,208:ERROR: b'bash: /tmp/some_script.sh: \xd0\x9d\xd0\xb5\xd1\x82 \xd1\x82\xd0\xb0\xd0\xba\xd0\xbe\xd0\xb3\xd0\xbe \xd1\x84\xd0\xb0\xd0\xb9\xd0\xbb\xd0\xb0 \xd0\xb8\xd0\xbb\xd0\xb8 \xd0\xba\xd0\xb0\xd1\x82\xd0\xb0\xd0\xbb\xd0\xbe\xd0\xb3\xd0\xb0\n'

我錯過了什么? 我希望輸出像來自控制台的西里爾文一樣。

好吧,問題與paramiko 在聲明RotatingFileHandler我沒有指定encoding參數。 我有:

fh = logging.handlers.RotatingFileHandler(
    'log/logname.log', 
    'a', 
    10000000, 
    3)

正確的行是:

fh = logging.handlers.RotatingFileHandler(
    'log/logname.log', 
    'a', 
    10000000, 
    3,
    encoding='utf-8')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM