ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HTML에서 파이썬 실행하는 Pyscript란
    Coding 2023. 12. 10. 04:31

    들어가기 앞서

    Python은 서버 사이드 또는 클라이언트 사이드에서 복잡한 프로그래밍 작업을 수행할 수 있는 프로그래밍 언어입니다. 이 두 기술을 연결하는 일반적인 방법은 다음과 같습니다:

    • 서버 사이드 Python 스크립트: 웹 서버에서 Python 코드를 실행하여 HTML 페이지를 동적으로 생성할 수 있습니다. 예를 들어, Flask나 Django와 같은 Python 웹 프레임워크를 사용하여 서버 사이드에서 Python 코드를 작성하고 실행할 수 있습니다. 이 방식에서는 Python 코드가 서버에서 실행되고, 결과 HTML이 클라이언트(브라우저)로 전송됩니다.
    • AJAX를 사용한 Python과의 통신: HTML/JavaScript에서 작성된 클라이언트 사이드 코드가 AJAX 요청을 통해 서버 사이드의 Python 스크립트와 통신할 수 있습니다. 이 경우, 사용자의 브라우저는 Python 코드가 실행되는 서버에 요청을 보내고, 서버는 이 요청을 처리한 후 결과를 다시 브라우저로 반환합니다.
    • WebAssembly를 사용한 Python 실행: 최근의 발전으로, Python 코드를 WebAssembly로 컴파일하여 브라우저에서 직접 실행할 수 있는 방법이 개발되고 있습니다. 이는 아직 일반적인 접근 방법은 아니며, 모든 Python 기능이 지원되는 것은 아닙니다.
    • Jupyter Notebook 사용: Jupyter Notebook은 브라우저 기반 인터페이스를 통해 Python 코드를 작성하고 실행할 수 있는 도구입니다. 이는 데이터 과학 및 교육 목적으로 널리 사용됩니다.

    일반적으로 웹 개발에서 HTML Python을 함께 사용한다면, Python은 서버 사이드 로직을 처리하는 데 사용되고, HTML은 사용자 인터페이스를 구성하는 데 사용됩니다.



    하지만


    브라우저에서 파이썬을 실행하게 되면 파이썬 사용자들에게는 좀더 확장성이 커지는 계기가 될 것이란 생각이다. 그래서 html에 표현될 수 있는 파이썬으로 만들어진 여러가지가 활성화 될 수도 있겠다는 생각이다.

    <html>
    
    <head>
     <script defer src="https://pyscript.net/alpha/pyscript.js"></script>
     <link rel="stylesheet" href="https://unpkg.com/@picocss/pico@latest/css/pico.min.css" /> 
    </head>
    
    <body>
     <py-script>
      print('hello world')
     </py-script>
    </body>
    
    </html>
    더보기

    [Reference] : nanumi, 「우린친구블로그 - 자바스크립트 종말각?! HTML에서 파이썬 실행하는 PyScript 등장!」 http://urin79.com/?mid=blog&document_srl=20668366.


    #Node.js 환경에서 자바스크립트로 파이썬 스크립트를 실행한다.

    노드의 기본 내장 모듈인 "child-processs"를 사용한다.(python-shell등의 외부 라이브러리를 사용할 수도 있음)

     

    개요

    실행 : child-process 모듈의 spawn을 통해 파이썬 파일을 실행

    const result = reqire('child_process').spawn('python', ['__file__.py', '매개변수1', '매개변수2',..]):

    결과 : stdout의 이벤트리스터를 통해 실행 결과를 받는다.

    reusult.stdout.on('data', function(data) {
    
    console.log(data.toString()):
    }):

     

    javascript로 파이썬 파일 실행 방법

    1)코드 

    # print.py 파일
    
    print('황금알 낳는 거위를 찾아서')

    황금알 낳는 거위를 찾아서 <<를 출력하는 파이썬 코드

     

    2)javascript 코드에서 파이썬 코드 실행 및 결과 출력

    // connectPython_print.js 파일
    
    const spawn = require('child_process').spawn;
    
    const result = spawn('python', ['print.py'));
    
    result.stdout.on('data', function(data) {
        console.log(data.toString());
    });
    
    result.stderr.on('data', function(data) {
        console.log(data.toString());
    });

    차일드프로세스의 spawn을 통해 파이썬 프린트.py 명령어를 실행해 파이썬 코드를 구동시킨다. stdout의 data 이벤트 리스터를 통해 결과를 받아서 출력한다. 위 코드에서 data를 toString()없이 사용하면, 버퍼가 출력되기때문에 주의가 필요하다고함

     

    javascript로 파이썬 함수 실행 방법

    const spawn = require('child_process').spawn;
    
    const result_01 = spawn('python', ['function_print.py'], );
    
    result_01.stdout.on('data', (result)=>{
        console.log(result.toString());
    });

    자바스크립트에서 파이썬 함수를 출력하는 것은 동일하다.

    하지만 파이썬 파일에 name == 'main'인 경우, 함수를 호출하도록 설정을 해야 한다.

    즉, 예로 기존 vscode에서 

    if __name__ == '__main__':
        app.run(debug=True, port=8000)

    app.py같은 파일에 정의하는 것 위와 같은 코드와 index.js에 정의하는 것을 말하는 것 같다.

    그리고 '인수 전달' 호출 방법은

    인자를 받는 함수가 정의된 파이썬 코드

    function_args.py 파일에

    import sys
    
    def getName(name, age):
        print (name + " : " + age)
    
    if __name__ == '__main__':
        getName(sys.argv[1], sys.argv[2])

    와 같은 코드를 넣어주어 매개변수를 받기위해 파이썬의 sys모듈을 임포트한다. name, age 인자를 받아, 출력하는 getName함수를 정의했다. 실행환경 체크 조건문에서 함수를 호출하면서 sys.argv[1], sys.argv[2]로 인수를 전달한다.

     

    javascript로 파이썬 함수에 인수 전달 호출 방법

    자바스크립트에서 파이썬 함수를 호출하면서 매개 변수를 전달하게된다.

    const result_02 = spawn('python', ['function_args.py', '황금알', '3']);
    
    result_02.stdout.on('data', (result)=>{
        console.log(result.toString());
    });
    
    // 출력 결과 => "황금알 : 3"

    spawn으로 매개변수를 받는 function_args.py 파일을 실행시키면서 위와 같은 출력 결과를 파라미터로 전달한다. 그리고 child-process 모듈에서는 spawn뿐만 아니라, exec을 통해서도 외부 명령어를 실행할 수 있다.

    1. spawn은 별도 프로세스를 띄워서 명령어를 실행하고,

    2. exce은 셸을 띄워서 명령어를 실행한다. 즉 경로의 파일 목록을 출력하는 방법이다.

    const exec = require('child_process').exec;
    
    const result = exec('ls');
    
    result.stdout.on('data', function(ls_result){
        console.log(ls_result.toString());
    })

     

     

     

     

Designed by Tistory.