账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    salt-cp时报错UnicodeDecodeError
    50
    0

    问题描述

    使用salt-cp拷贝了一个tar.gz的压缩包,结果在执行后报错,但是文件却已经完整的传输到了minion端。

    问题出现的环境背景及自己尝试过哪些方法

    我尝试将python2.7的代码环境换成UTF-8,重启salt-master和salt-minion后再次尝试,还是不行。

    报错情况

    [root@localhost ]# salt-cp '*' scan.tar.gz /web/soft/scan
    [CRITICAL] Could not deserialize msgpack message. This often happens when trying to read a file not in binary mode. To see message payload, enable debug logging and retry. Exception: 'utf8' codec can't decode byte 0x8b in position 1: invalid start byte
    [ERROR   ] An un-handled exception was caught by salt's global exception handler:
    UnicodeDecodeError: 'utf8' codec can't decode byte 0x8b in position 1: invalid start byte
    Traceback (most recent call last):
      File "/usr/bin/salt-cp", line 10, in <module>
        salt_cp()
      File "/usr/lib/python2.7/site-packages/salt/scripts.py", line 387, in salt_cp
        client.run()
      File "/usr/lib/python2.7/site-packages/salt/cli/cp.py", line 52, in run
        cp_.run()
      File "/usr/lib/python2.7/site-packages/salt/cli/cp.py", line 142, in run
        ret = self.run_oldstyle()
      File "/usr/lib/python2.7/site-packages/salt/cli/cp.py", line 165, in run_oldstyle
        return local.cmd(*args)
      File "/usr/lib/python2.7/site-packages/salt/client/__init__.py", line 741, in cmd
        **kwargs):
      File "/usr/lib/python2.7/site-packages/salt/client/__init__.py", line 1603, in get_cli_event_returns
        **kwargs
      File "/usr/lib/python2.7/site-packages/salt/client/__init__.py", line 1184, in get_iter_returns
        for raw in ret_iter:
      File "/usr/lib/python2.7/site-packages/salt/client/__init__.py", line 1109, in get_returns_no_block
        no_block=True, auto_reconnect=self.auto_reconnect)
      File "/usr/lib/python2.7/site-packages/salt/utils/event.py", line 642, in get_event
        ret = self._get_event(wait, tag, match_func, no_block)
      File "/usr/lib/python2.7/site-packages/salt/utils/event.py", line 544, in _get_event
        mtag, data = self.unpack(raw, self.serial)
      File "/usr/lib/python2.7/site-packages/salt/utils/event.py", line 435, in unpack
        data = serial.loads(mdata, encoding='utf-8')
      File "/usr/lib/python2.7/site-packages/salt/payload.py", line 144, in loads
        ret = msgpack.loads(msg, use_list=True, ext_hook=ext_type_decoder, encoding=encoding)
      File "msgpack/_unpacker.pyx", line 138, in msgpack._unpacker.unpackb (msgpack/_unpacker.cpp:138)
    UnicodeDecodeError: 'utf8' codec can't decode byte 0x8b in position 1: invalid start byte
    Traceback (most recent call last):
      File "/usr/bin/salt-cp", line 10, in <module>
        salt_cp()
      File "/usr/lib/python2.7/site-packages/salt/scripts.py", line 387, in salt_cp
        client.run()
      File "/usr/lib/python2.7/site-packages/salt/cli/cp.py", line 52, in run
        cp_.run()
      File "/usr/lib/python2.7/site-packages/salt/cli/cp.py", line 142, in run
        ret = self.run_oldstyle()
      File "/usr/lib/python2.7/site-packages/salt/cli/cp.py", line 165, in run_oldstyle
        return local.cmd(*args)
      File "/usr/lib/python2.7/site-packages/salt/client/__init__.py", line 741, in cmd
        **kwargs):
      File "/usr/lib/python2.7/site-packages/salt/client/__init__.py", line 1603, in get_cli_event_returns
        **kwargs
      File "/usr/lib/python2.7/site-packages/salt/client/__init__.py", line 1184, in get_iter_returns
        for raw in ret_iter:
      File "/usr/lib/python2.7/site-packages/salt/client/__init__.py", line 1109, in get_returns_no_block
        no_block=True, auto_reconnect=self.auto_reconnect)
      File "/usr/lib/python2.7/site-packages/salt/utils/event.py", line 642, in get_event
        ret = self._get_event(wait, tag, match_func, no_block)
      File "/usr/lib/python2.7/site-packages/salt/utils/event.py", line 544, in _get_event
        mtag, data = self.unpack(raw, self.serial)
      File "/usr/lib/python2.7/site-packages/salt/utils/event.py", line 435, in unpack
        data = serial.loads(mdata, encoding='utf-8')
      File "/usr/lib/python2.7/site-packages/salt/payload.py", line 144, in loads
        ret = msgpack.loads(msg, use_list=True, ext_hook=ext_type_decoder, encoding=encoding)
      File "msgpack/_unpacker.pyx", line 138, in msgpack._unpacker.unpackb (msgpack/_unpacker.cpp:138)
    UnicodeDecodeError: 'utf8' codec can't decode byte 0x8b in position 1: invalid start byte

    你期待的结果是什么?实际看到的错误信息又是什么?

    不知道这是什么情况。

    1
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • 漫步あ雨中 普通会员 1楼

      "UnicodeDecodeError"通常出现在你尝试使用Python的内置函数来解码一个包含非ASCII字符的字符串时。在Python中,所有字符都被视为ASCII字符,因此如果你尝试解码一个包含非ASCII字符的字符串,你将得到一个"UnicodeDecodeError"。

      例如,如果你尝试解码一个包含日语字符的字符串,你将得到一个"UnicodeDecodeError",因为日语字符在ASCII编码中并不是一个单独的字符,而是由多个ASCII字符组成的。

      如果你的代码中有一个字符串包含非ASCII字符,你可以尝试使用encode()函数将其转换为ASCII编码。例如:

      python my_string = "你好世界!" my_string = my_string.encode("utf-8")

      在这个例子中,encode("utf-8")将字符串"你好世界!"转换为UTF-8编码,以便它可以被解码。

      如果你的代码中有一个字符串包含非ASCII字符,但你希望这些字符仍然保持原始的格式,你可以使用decode()函数将其转换回原始的格式。例如:

      python my_string = "你好世界!" my_string = my_string.decode("utf-8")

      在这个例子中,decode("utf-8")将UTF-8编码的字符串"你好世界!"转换回原始的字符串,以便你可以继续使用它。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部