2017년 9월 15일 금요일

Bash Prompt Statement variables

Received too large ...


.bashrc 파일에 뭐 좀 이것 저것 추가하고 난 이후에 SCP 접속을 했더니 ...

1. 접속이 안된다.



2. 해결 방법.


   결론부터 요약하면 다음 코드를 출력문 앞에 추가해 준다.

  
1
2
3
if [ -"$PS1" ]; then    
    return
fi
cs

   터미널 접속인지 아닌지 $PS1 값으로 체크해서 터미널 접속인 경우에만
   출력하도록 한다.

2017년 9월 5일 화요일

Sphinx, sphinxcontrib-mermaid 그리고 한글.

'ascii' codec can't encode characters in position -: ordinal not in range(128)


파이썬을 사용하다 보면 늘 만날 수 있는 친숙한 에러 문장이지만 직접 작성한 코드가 아닌
경우라면 난감하기 이를 데가 없겠다.

1. sample.rst


1
2
3
4
5
6
7
.. mermaid::
 
   A[Christmas] --> |Get money|B(Go shopping)
   B --> C{생각 좀 하고}
   C --> |One|D[Laptop]
   C --> |Two|E[iPhone]
   C --> |Three|F[Car]
cs

   위 코드는 Mermaid Live Editor 상에서 다음 그림과 같이 깔끔하게 표시됩니다.

Get money
One
Two
Three
Christmas
Go shopping
생각 좀 하고
Laptop
iPhone
Car

2. make html


   하지만, Sphinx 문서 빌드 명령을 실행하면 정상적으로 실행되지 않습니다.
  
1
2
3
4
5
preparing documents... done
writing output... [100%] rest/Sample
Encoding error:'ascii' codec can't encode characters in position 243-244: ordinal not in range(128)
The full traceback has been saved in /tmp/sphinx-err-mRmF9N.log, if you want to report the issue to the developers.
make: *** [html] Error 1
cs

   하지만 sample.rst의 경우 UTF-8 encoding으로 잘 저장된 파일입니다.
   호출 스택과 같이 디버깅해 보면 unicode 자료형인 code에 한글이 있는 경우
   타입 예측이 실패해서 에러가 발생한 것으로 보인다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Traceback (most recent call last):
  File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinx/cmdline.py", line 306, in main
    app.build(opts.force_all, filenames)
  File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinx/application.py", line 339, in build
    self.builder.build_update()
  File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinx/builders/__init__.py", line 331, in build_update
    'out of date' % len(to_build))
  File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinx/builders/__init__.py", line 397, in build
    self.write(docnames, list(updated_docnames), method)
  File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinx/builders/__init__.py", line 434, in write
    self._write_serial(sorted(docnames))
  File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinx/builders/__init__.py", line 443, in _write_serial
    self.write_doc(docname, doctree)
  File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinx/builders/html.py", line 555, in write_doc
    self.docwriter.write(doctree, destination)
  File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/docutils/writers/__init__.py", line 80, in write
    self.translate()
  File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinx/writers/html.py", line 56, in translate
    self.document.walkabout(visitor)
  File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/docutils/nodes.py", line 174, in walkabout
    if child.walkabout(visitor):
  File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/docutils/nodes.py", line 174, in walkabout
    if child.walkabout(visitor):
  File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/docutils/nodes.py", line 166, in walkabout
    visitor.dispatch_visit(self)
  File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/docutils/nodes.py", line 1882, in dispatch_visit
    return method(node)
  File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinxcontrib/mermaid.py", line 281, in html_visit_mermaid
    render_mm_html(self, node, node['code'], node['options'])
  File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinxcontrib/mermaid.py", line 245, in render_mm_html
    imgcls=None, alt=None)
  File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinxcontrib/mermaid.py", line 235, in _render_mm_html_raw
    self.body.append(tag_template.format(align=node.get('align'), code=self.encode(code)))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 243-244: ordinal not in range(128)
cs

3. sys.setdefaultencoding


1
2
3
import sys
reload(sys)
sys.setdefaultencoding('UTF-8')
cs

   이렇게 코드에 삽입해도 되지만 다음과 같이 가상 환경의 기본 인코딩을 변경하자.

   VirtualEnvironment/Sphinx/lib64/python2.7/ 경로에 sitecustomize.py 파일을 생성 후
   다음 내용을 입력 후 저장한다.

1
2
3
4
# -*- coding: UTF-8 -*-
 
import sys
sys.setdefaultencoding('UTF-8')
cs

  

3. 결론


   결국 언젠가는 Python 2.X 버전을 대체해야 한다.