Fabric: ์œ ๋‹ˆ ์ฝ”๋“œ u '\ xff'๋กœ puts ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ UnicodeEncodeError๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  stream.encoding์ด None์ž…๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2015๋…„ 04์›” 08์ผ  ยท  5์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: fabric/fabric

์•ˆ๋…•ํ•˜์„ธ์š”,
๋ณ€์ˆ˜ s ๋ฅผ ๋‹ค๋ฅธ ๊ฐ’ u '\ xff'๋กœ ๋ฐ”๊พธ๋ฉด ์ด ํ…Œ์ŠคํŠธ๋Š” ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

[ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค]

@mock_streams('stdout')
def test_puts_with_encoding_type_none_output():
    """
    puts() should print unicode output without a stream encoding
    """
    s = u"string!"       #<====== replace to u"\xff"
    output.user = True
    sys.stdout.encoding = None
    puts(s, show_prefix=False)
    eq_(sys.stdout.getvalue(), s + "\n")

[์—ญ ์ถ”์ ]
UnicodeEncodeError : 'ascii'์ฝ”๋ฑ์€ ์œ„์น˜ 0-4์˜ ๋ฌธ์ž๋ฅผ ์ธ์ฝ”๋”ฉ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์„œ ์ˆ˜๊ฐ€ ๋ฒ”์œ„์— ์—†์Šต๋‹ˆ๋‹ค (128).

[์ฝ”๋ฉ˜ํŠธ]
๋ฒ„๊ทธ๊ฐ€์žˆ๋Š” ์ง€์ ์€ utils.py์˜ '_encode'ํ•จ์ˆ˜์— ์žˆ์Šต๋‹ˆ๋‹ค. str (msg)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ˆœํžˆ msg๋ฅผ str๋กœ ์บ์ŠคํŠธํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

def _encode(msg, stream):
    if isinstance(msg, unicode) and hasattr(stream, 'encoding') and not stream.encoding is None:
        return msg.encode(stream.encoding)
    else:
        return str(msg)         #<========== buggy point
Bug Needs investigation Needs patch

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋ˆ„๊ตฌ ์‹ ๊ฒฝ ์“ฐ๋‚˜์š”?

๋ชจ๋“  5 ๋Œ“๊ธ€

๋ˆ„๊ตฌ ์‹ ๊ฒฝ ์“ฐ๋‚˜์š”?

์˜ˆ, return str(msg) ๋ฅผ return msg ํ•˜๋ฉด ํ…Œ์ŠคํŠธ๋ฅผ ์ค‘๋‹จํ•˜์ง€ ์•Š๊ณ  ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ์ด ์บ์ŠคํŠธ๊ฐ€ ์ฒ˜์Œ์— ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ด๊ฒƒ์„ ์ง€๊ธˆ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ํ™•์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ ˆ๋Œ€์ ์œผ๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ ๊นจ๋œจ๋ฆฌ์ง€๋Š” ์•Š์„ ๊ฒƒ์ด์ง€๋งŒ, ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌธ์ž์—ด์ด ์•„๋‹Œ puts ๊ฒƒ์„ ํ—ˆ์šฉํ•˜๊ณ  ํ˜„๋ช…ํ•œ ๊ฒƒ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

>>> class Foo(object):
...   def __str__(self): return "The best Foo in the world"
...
>>> from fabric.api import puts
>>> puts(Foo())
The best Foo in the world

๋‚˜๋Š” ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (github์—์„œ ์ด๊ฒƒ์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด ํฌ๋ง์ด ์—†์œผ๋ฏ€๋กœ ์˜ˆ์ œ๋ฅผ ์ฐพ์œผ๋ ค๊ณ ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค).

ํ•˜์ง€๋งŒ ์ธ์ฝ”๋”ฉ ์„ธํŠธ๊ฐ€์—†๊ณ  ์œ ๋‹ˆ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด puts ๊ฐ€ ์šฐ๋ฆฌ๋ฅผ ์ถฉ๋Œ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์˜ณ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐ€์žฅ ์ตœ์•…์˜ ๋ฐฉ๋ฒ•์€ ๋ฌธ์ œ๊ฐ€๋˜๋Š” ์ค„์„์ด ๋ธ”๋ก์œผ๋กœ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

try:
    return str(msg) # Original behavior added for 'reasons'
except UnicodeDecodeError:
    return msg # Best-effort fallback

์ด๋Ÿฐ ์‹์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ํ˜„์œผ๋กœ ์บ์ŠคํŠธํ•˜๋Š” ๋ฐ ๋Œ€ํ•œ ์ „์กฐ์ ์ธ ์ด์œ ๊ฐ€ ๋ฌด์—‡์ด๋“ ๊ฐ„์— ๊ณ„์† ์ž‘๋™ํ•˜์ง€๋งŒ ๋…ผ์˜์ค‘์ธ ๋ฒ„๊ทธ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ๋Š” "๊ธ€์Ž„,์ด๊ฒŒ ๋ญ”์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ str() ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค ์ด๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ ํŒŒ์ดํ”„ ์•„๋ž˜๋กœ ๋ฐ€์–ด ๋„ฃ์Šต๋‹ˆ๋‹ค. "

sudo ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์œผ๋ฉฐ io.py self.stream.write(text) ์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์œ ๋‹ˆ ์ฝ”๋“œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰
bleepcoder.com์€ ๊ณต๊ฐœ์ ์œผ๋กœ ๋ผ์ด์„ ์Šค ๋œ GitHub ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „ ์„ธ๊ณ„ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” GitHub, Inc. ๋˜๋Š” ํ”„๋กœ์ ํŠธ์— GitHub๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์™€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์„œ๋ฒ„์—์„œ ๋น„๋””์˜ค ๋‚˜ ์ด๋ฏธ์ง€๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ถŒ๋ฆฌ๋Š” ํ•ด๋‹น ์†Œ์œ ์ž์—๊ฒŒ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ํŽ˜์ด์ง€์˜ ์†Œ์Šค: ์ถœ์ฒ˜

์ธ๊ธฐ์žˆ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด
์ธ๊ธฐ์žˆ๋Š” GitHub ํ”„๋กœ์ ํŠธ
๋” ๋งŽ์€ GitHub ํ”„๋กœ์ ํŠธ

ยฉ 2024 bleepcoder.com - Contact
Made with in the Dominican Republic.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.