목표
- 저번까지는, 예제 코드를 실행시켰는데, 실제 셀레니움 코드를 실행 시켜보자.
과정
처음 dag 코드 실패(그런데 vscode에서 실행했을땐 동작했었다 ;;)
run_external_script = SSHOperator( task_id='run_external_script', ssh_conn_id='ssh_default', command='python C:\\script\\my_script.py' )
외부의 스크립트를 실행한거라 오류 내용이 출력이 안됨. 따라서 오류 로그를 출력하는 메모장을 추가
"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', )
기록된 오류 내용 출력
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로 설정되어 있어 발생하는 문제
스크립트 가장 위에 터미널 출력 인코딩을 utf-8로 고정 설정
# 터미널 출력 인코딩 설정 sys.stdout.reconfigure(encoding='utf-8')
정상동작
-> 그런데 여전히 동작하는게 눈으로 보이지 않고 백그라운드에서 실행된다.
결과해석
테스트용 코드를 실행할때는 유니코드(한글) 이 포함되지 않은 코드여서 정상동작 했던것이다. 실제 코드는 한글을 변수로 이용해 다음 동작을 실행하는 부분이 있었어서, 오류가 뜬것
의문점 : 같은 스크립트를 vscode에서 실행할땐 동작, cmd에서 동작할땐 안된 이유가 뭘까?
VS 코드의 터미널은 기본적으로 UTF-8 인코딩을 사용, 따라서 유니코드 문자 처리에 문제가 없다.
CMD는 기본적으로 CP949 인코딩을 사용해 오류를 발생할 수 있다.
'다용도 로컬 파이프라인 구성' 카테고리의 다른 글
Poetry + 도커컨테이너 모듈 의존성 간편화2 (2) | 2024.07.16 |
---|---|
airflow.cfg 상세 분석 (0) | 2024.07.01 |
도커 컨테이너에서 외부 셀레니움 실행 2 (0) | 2024.06.15 |
도커 컨테이너에서 외부 셀레니움 실행 1 (0) | 2024.06.13 |
Poetry + 도커컨테이너 모듈 의존성 간편화1 (1) | 2024.06.12 |