본문 바로가기

카테고리 없음

Ironpython TypeError expected str, got bytearray with socket.send()

반응형

(혹시 유니티에서 파이썬 적용할 필요가 있다면 이 전 글을 확인하길 바란다. 주소에서 숫자 -1 해주면 된다 ㅎ)


최근에 유니티에서 파이썬을 쓸 일이 생겨서 부랴부랴 연구하면서 작업에 몰두했다.. 단순히 실행만 하면되는 줄 알았는데 엄청나게 공을 들이게 된 것이다.


간단한 예제를 진행중인데 아래와 같이 일반 python으로 실행하면 정상적으로 해당 주소와 연결을하고 결과를 전송한다.

python -m test.py 172.0.0.1


그런데 유니티 내에서 똑같이 명령을 주면 전달이 안되지 않는가..? 처음 하루는 처음 써보는거라 로그를 띄울 줄도 모르고 명령 프롬프트로 실행할 생각도 못해서 로그도 없이 하루를 보냈다.


다음날은 전에 쓴 글을 참고하면 알겠지만, 유니티에 로그가 뜨도록해서 확인을 해보니

TypeError expected str, got bytearray 라고 나온다.

이말은 즉슨, 문자열만 허락했는데 byte 배열을 넣으려 하니 난처하단 소리다.


그렇다.. 일반 python에선 전송 방식이 bytearray로 이루어지지만 ironpython에서는 문자열을 입력하면 그것을 bytearray로 바꿔서 전송한다.

뭐.. 그러면 그냥 바꿔서 하면 되지 않느냐 하겠지만


필자는 다른 사람이 제작한 복잡한 코드를 실행해야해서 이 방식을 따를수가 없었다 ㅠㅠ 그렇게 이틀을 더 삽질한 끝에..



https://github.com/IronLanguages/main/tree/ipy-2.7-maint

직접 ironpython의 소스코드를 받아서 bytearray를 통해 전송할 수 있는 메소드를 추가해주었다.


과정은 이렇다.


1. 다운로드 - 당연하게도

2. 압축풀기 

3. 압축 푼 경로/main-ipy-2.7-maint\Solutions/IronPython.sln 실행

4. socket.cs 검색

5. 메소드 추가

7. 빌드

8. 실행파일 교체

9. 실행

10. 예에



물론 이렇게 간단한 것도 몇개 체크할 사항이 있다.

1. .Net FrameWork SDK를 최신버전으로 갖고있는가?

  - 필자는 그렇지 못해서 처음에 오류가 발생했다. 그래서 그냥 다 받아줬다.


2. 이미 한번 프로젝트에서 빌드 실패를 보았는가?

  - 필자는 이 상태에서 압축을 새로 풀었다. 프로젝트 파일이 한번 꼬이면 끝이 없기 떄문이다.


이렇게만 하고 교체해서 정상 작동하도록 만들었다.


(경사 났네 경사 났어)

반응형