본문 바로가기
무모한 도전-주식 인공지능 만들기

자식 프로세스에 정보를 전달하기 위한 연습

by 인터넷떠돌이 2019. 1. 16.
반응형

안녕하세요?


지난번 포스팅에서 어떻게 첫번째 장애물은 어떻게 넘긴 것 같기는 합니다만, 여전히 문제가 남아 있습니다. 바로 2번째 문제로 어떻게 부모 프로세스에서 자식프로세스로 데이터를 전달해 주느냐 하는 것 입니다. 그래서 그냥은 간단하게 확인할 수는 없고 해서 이번 포스팅 부터 새로운 프로젝트를 연습용으로 만들어서 한번 시험해 보고 나서 이를 이용해서 실전에 들어가 보고자 합니다.



먼저 연습을 위한 프로젝트로 subprocessTest라는 프로젝트 명을 집어 넣어서 새로운 프로젝트를 생성해 보도록 합니다.



다음으로는 os와 subprocess 모듈을 가지고 와서, 새로이 코드를 작성해 보도록 합니다.



잠시 if __name__ == '__main__': 을 만드는 과정에서 여백을 잘못 주는 바람에 많이 헤메이기는 했습니다만, 아무튼 어떻게 만들어 놓기는 했습니다. 이번에는 일단 노트패드라는 프로그램을 불러 오는 것으로 만들었습니다.



어떻게 해서 이번에는 노트패드를 여는 데 까지는 성공했습니다.




그리고 노트패드를 닫자 위 스크린샷처럼 정상적인 종료라는 메세지를 띄우면서 종료가 되는 것을 볼 수 있었습니다.



이제는 communicate()함수 안에다가 input= 값을 집어 넣어서, 여기서는 제대로 반영이 될 것이라 생각을 하고서 한번 시도를 해 보도록 합니다.



그런데 어떻게 된 것인지는 몰라도, 전혀 제가 데이터로 지정을 했는 값이 전혀 없는 것을 볼 수 있었습니다. 어딘가 잘못된 것을 알만한데, 어디가 정확히 잘못된 것인지는 아직은 모르겠습니다.



그래서 한번 이번에는 stdin, stdout, sdterr이라는 값을 각각 subprocess.PIPE라고 지정을 해 주도록 합니다. 이렇게 하면 연결이 되어서 어떻게 데이터가 오고가고 할 수 있을리라 생각을 했습니다.




그런데 이번에는 위 스크린샷과 같은 에러가 발생하는 것을 볼 수 있었습니다. 일단 str로 오면 안되고, 이것을 바꾸어야 한다고 하는 것을 볼 수 있었습니다.



그래서 위 스크린샷과 같이 data라는 변수에 원하는 값을 집어 넣도록 하고, 여기다가 .encode()라는 함수를 사용해서 인코딩을 해 주도록 합니다.



이제서야 에러가 없이 실행이 되는 것을 볼 수 있었습니다. 하지만 그래도 처음에 예상을 하였는 노트패드로 열었는 텍스트 문서에서 문자열로 나오리라 생각을 했습니다만, 그런 것은 안 나오는 것을 볼 수 있었습니다. 그래서 생각을 하기를, 이 노트패드에 문자열의 형태로 나오게 띄우는 것도 유용하겠지만, 지금 제가 하려고 하는 것과는 거리가 있기에, 일단은 노트패드를 열어보는 것은 여기까지로 하고, 다음으로 할 일은 바로 새로운 파이썬 파일을 만들어서 어떻게 데이터를 주고 받을 수 있는지를 테스트 해 보고자 합니다.

반응형