ssh远程运行python脚本报UnicodeDecodeError错误

最近在服务器上写了个python脚本来跑一些任务,本地(macos 10.14)通过ssh来远程运行这个脚本:

1
ssh knktc@cloud.knktc.com /home/knktc/test.py

结果却出现了类似下面的错误:

1
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 1941: ordinal not in range(128)

因为现在已经全部改用python3,又出现这样的错误感觉有点奇怪。

用locale命令检查了下本地的LC_CTYPE,是”zh_CN.UTF-8”,再用”locale -a”命令检查下远程服务器的输出,发现并不支持”zh_CN.UTF-8”,估计是这个原因导致了远程脚本执行的时候没用UTF8而是用ASCII作为了LC_CTYPE的值。

于是,要解决这个问题,可以修改下本地的ssh客户端配置,编辑本地的/etc/ssh/ssh_config配置文件(可能需要sudo),注释掉如下配置:

1
SendEnv LANG LC_*

或是编辑服务器上的/etc/ssh/sshd_config配置文件,注释掉如下的配置(修改完成后需要重启sshd服务):

1
AcceptEnv LANG LC_*

重试一次,完全正常了。

坚持原创技术分享,您的支持将鼓励我继续创作!