0. pypy.js
https://github.com/pypyjs/pypyjs (1,135 stars)
input()을 하면 EOFError를 일으킨다!
1. brython
http://brython.info/index.html (공식 사이트가 느리고 허접하다. 그래도 에디터나 콘솔을 테스트해볼 수 있음)
https://github.com/brython-dev/brython (1,308 stars)
만약 웹에서 파이썬 에디터나 콘솔을 만들고 싶다면 pypy.js보다는 이걸 더 추천한다.
사용한 지 좀 돼서 가물가물하긴 하지만, pypy.js보다 사용 방법이 더 간단하고 input()처리가 가능하다.
다만 input()을 웹 alert 창으로 받아서...좀 읭스럽긴 하다.
html에 이렇게 brython.js를 가져온다.
헌데 위의 스크립트는 오직 파이썬 기본 문법만을 돌릴 수 있기에, 만약 모듈을 임포트하고 싶다면 이렇게 brython_stdlib.js도 함께 가져와야 한다.
그리고 body 태그에 다음과 같이 brython()을 가져오고, 적당한 태그 안에 파이썬 코드를 넣어준다.
print(123)
그 다음엔 다음과 같이 script type을 "text/python"으로 두고 파이썬 명령어를 집어넣으면 된다.
이런 식으로 사용한다.
웹 브라우저에 접근해야 해서 기존 파이썬에서는 잘 쓰지 않는 좀 생소한 모듈을 쓴다.
그리고 print된 것들이 다 console.log로 출력돼서 만약 이 값들을 가져오고 싶으면 따로 조치를 취해야 한다.(이게 은근 복잡함..내 경우에는 로컬에 brython.js를 직접 넣어서 uglify된 코드를 뒤져가며 고쳤는데....더 좋은 방법이 있을 것이다)
2. python-shell
node.js의 모듈 중 하나.
위의 라이브러리들이 client단의 javascript를 기반으로 돌아간다면, 이는 server단의 node.js를 기반으로 돌아간다.
정말 간단하게 파이썬 코드를 컴파일 할 수 있다.(사용방법은 위의 npm 페이지나 github에 다 나와있음)
위의 라이브러리들에서는 불가능하거나 애매하게 작동했던 python input()도 사용가능
다만 node.js로만 python-shell을 돌린다면 콘솔에서 stdin을 바로 받아낼 수 있어 굉장히 쉽지만,
웹에서 사용할 경우, 웹과 데이터를 주고 받아야 하기 때문에 socket.io 통신을 어느 정도 공부해야 원활하게 사용할 수 있다.
+ jq-console
온라인 파이썬 컴파일러를 제공하는 많은 사이트들이 jq-console을 이용한다.
하지만 jq-console에서 파이썬 컴파일러에 대한 라이브러리를 제공하진 않는 듯하다.
그래서 repl.it 나 코드카데미 등 유명한 사이트들이 아니면 제대로 쓰는 경우를 못 봤고, 대부분 brython을 이용하거나 어찌어찌 허술하게 만듦
특히 input 쪽은 굉장히 취약하다.
3. skulpt
https://github.com/skulpt/skulpt
javascript만으로 돌아간다.
굉장히 편리하지만 python 2 만 지원한다.
다음과 같이 js 파일들을 알아서 넣어주고,
function outf(text) { let ouput = iframe.parent().parent().find('.ace-output'); ouput.append(text); } function builtinRead(x) { if (Sk.builtinFiles === undefined || Sk.builtinFiles["files"][x] === undefined) throw "File not found: '" + x + "'"; return Sk.builtinFiles["files"][x]; } function runit() { let prog = editor.getValue(); let mypre = iframe.parent().parent().find('.ace-output'); mypre.html(''); Sk.pre = "output"; Sk.configure({output:outf, read:builtinRead}); try { Sk.importMainWithBody("", false, prog); } catch (e) { mypre.html(e.toString()); } }
'개발 > python' 카테고리의 다른 글
[python] is 와 == 의 차이점 (2) | 2017.10.27 |
---|---|
[python] print와 return의 차이점 (4) | 2017.10.27 |
[python] 제너레이터(Generator) (3) | 2017.09.12 |
[TIP] *args **kwargs (4) | 2017.09.12 |
windows에서 RabbitMQ 설치 (4) | 2017.06.20 |
댓글