안녕하세요?

 

이번에도 계속해서 이 서로다른 프로세스간의 통신 문제를 풀어내기 위해서 이래저래 씨름을 하다가, 하다하다 안 되어서 결국 다른 방법을 써서 어떻게 하면 코드가 제대로 동작하는 지를 알아보는 방법을 동원했습니다. 그리고 이번 포스팅에서는 그 방법에 대해서 한번 포스팅을 해 보고자 합니다.

 

먼저 RLTrader로 가서, 여기서 나온 결과를 다시 pytrader3로 보내기 위해서 한번 위 스크린샷처럼 write()함수를 쓰도록 해 봅니다.

 

그리고 나서 pytrader3로 가서는 자식 프로세스가 완료되기를 기다힌 다음에 닫도록 명령을 내려 주도록 해 봅니다. 이렇게 해서 이제 pytrader3를 실행시켜 봅니다.

 

그런데 제 기대와는 다르게 이번에도 나온것이 아무것도 없다는 것을 확인할 수 있었습니다. 이래서는 끝이 안 보인다는 생각이 들었습니다.

 

그래서 제대로 보내는 데이터는 잘 나오는 있는지 알아보기 위해서 위 스크린샷처럼 pytrader3에서 표식까지 찍어 놓고서 한번 움직여 봐야 합니다.

 

 

일단 QbyteArray라는 형식으로 변환이 되기는 되었지만, 일단은 제대로 된 값이 나오고 있는 것은 맞기는 맞다는 생각이 들기는 듭니다.

 

일단 그래서 RLTradedr로 가서 인터넷, 특히 stack overflow를 이 잡듯이 뒤져서 한번 알아낸 방법이 하나 있었습니다. 그래서 encode가 되지 않아서 생긴 문제인가 해서 한번 작업을 해 보았습니다. 그런데도 작업이 마음대로 되지 않았습니다.

 

다음으로는 한번 Qt의 매뉴얼 페이지를 읽어보니까, QProcess에 있지는 않지만, QObject에 있는 self.sender()를 통해서 신호가 오면 호출이 되는 함수가 있는데, 이 함수를 이용해서 받는다는 것을 볼 수 있었습니다.

 

그래서 클래스명(QObject)라고 해서 바꾼 다음에, 위 스크린샷처럼 pyqtSlot과 시그널을 쓰기 위한 함수를 사용하도록 했습니다.

 

그리고 신호가 들어오면, 위 스크린샷처럼 @로 데코레이션이된 메서드가 호출이 되는데, 이 호출이 된 메서드에서 신호를 str형식으로 현환이 되도록 만들어 주도록 합니다. 그러나 이러한 방법을 써도 상황이 좋지가 않았습니다.

 

그래서 한번 제대로 QProcess를 이용해서 다른 환경에 있는 파이썬 스크립트를 작동시키도록 합니다. 일단 먼저 위 스크린샷에서 보이는 것처럼, test.py라는 아무런 기능이 없는 윈도우를 띄우는 코드를 작성합니다.

 

일단 코드를 newTestAI프로젝트에서 실행시킬 경우, 위 스크린샷과 같은 조그만한 윈도우가 생성이 되는 것을 확인할 수 있습니다.

 

이제 pytrader3로 돌아와서, 여기서는 위 스크린샷처럼 main.py가 아니라 test.py를 실행시키기 위해서 한번 코드를 변형해서 제대로 실행이나 되는지 부터 확인해 보도록 합니다.

 

확인결과 제대로 실행까지는 되는 것을 확인할 수 있었습니다. 이것으로 이제 pytrader3에서 어떻게 하면 데이터를 전달할 수 있는지를 연습해 보아야 합니다. 지금와서 생각해 보면, 진작에 이럴 것인데, 이런 행동을 하지 않아서 헛고생을 너무 많이 한 것이 아닌가 하는 생각이 듭니다.

+ Recent posts