다용도 로컬 파이프라인 구성

도커 컨테이너에서 외부 셀레니움 실행 3

필만이 2024. 6. 23. 00:26

목표

  • 저번까지는, 예제 코드를 실행시켰는데, 실제 셀레니움 코드를 실행 시켜보자.

과정

  1. 처음 dag 코드 실패(그런데 vscode에서 실행했을땐 동작했었다 ;;)

    run_external_script = SSHOperator(
         task_id='run_external_script',
         ssh_conn_id='ssh_default',
         command='python C:\\script\\my_script.py'
         )
  2. 외부의 스크립트를 실행한거라 오류 내용이 출력이 안됨. 따라서 오류 로그를 출력하는 메모장을 추가
    "python C:\script\my_script.py > C:\script\log.txt" : 우선 my_script.py를 실행하고 그 출력내용을 log.txt로 보내
    "2>&1" : (에러가 발생하면) 오류(2)를 출력(&1) 저장하는곳에 보내라, 그러면 오류 메시지와 일반 출력을 동일한 위치에 기록할수 있음

    run_external_script = SSHOperator(
        task_id='run_external_script',
        ssh_conn_id='ssh_default',
        command='python C:\\script\\my_script.py > C:\\script\\log.txt 2>&1',
        )
  3. 기록된 오류 내용 출력

    Error processing 2024년도 제2차 감염병 예방·치료 기술개발사업 신규지원 대상과제 재공고: 'cp949' codec can't encode character '\xa9' in position 1783: illegal multibyte sequence
    Stacktrace:
    Traceback (most recent call last):
    File "C:\\script\\my_script.py", line 92, in visit_announcement_links
     print(f"Content for {title}:\n{content}\n")
    UnicodeEncodeError: 'cp949' codec can't encode character '\xa9' in position 1783: illegal multibyte sequence

    해석 : 터미널의 기본 인코딩이 CP949로 설정되어 있어 발생하는 문제

  1. 스크립트 가장 위에 터미널 출력 인코딩을 utf-8로 고정 설정

    # 터미널 출력 인코딩 설정
    sys.stdout.reconfigure(encoding='utf-8')
  2. 정상동작

-> 그런데 여전히 동작하는게 눈으로 보이지 않고 백그라운드에서 실행된다.

결과해석

  • 테스트용 코드를 실행할때는 유니코드(한글) 이 포함되지 않은 코드여서 정상동작 했던것이다. 실제 코드는 한글을 변수로 이용해 다음 동작을 실행하는 부분이 있었어서, 오류가 뜬것

  • 의문점 : 같은 스크립트를 vscode에서 실행할땐 동작, cmd에서 동작할땐 안된 이유가 뭘까?
    VS 코드의 터미널은 기본적으로 UTF-8 인코딩을 사용, 따라서 유니코드 문자 처리에 문제가 없다.
    CMD는 기본적으로 CP949 인코딩을 사용해 오류를 발생할 수 있다.