2013-09-04 3 views
6

나는 하나의 파이썬 스크립트가 연속 루프에서 실행되어야하는 상황이 있으며, 다른 스크립트에서 매개 변수를 전달해야합니다. 행동이 발생합니다.다른 스크립트에서 입력을 수신 대기 python 스크립트를 얻는 방법

두 번째 스크립트는 cgi를 사용하는 웹 사이트에 의해 트리거되며, 정상적으로 작동합니다. 연속 루프는 cgi 스크립트가 읽은 매개 변수를 취해야하며 직렬 포트를 통해 정보를 보냅니다.

특정 문제에 대해서는 직렬 포트를 재설정 할 때마다 직렬 연결을 통해 직접 데이터를 보내는 cgi 스크립트를 가질 수 없습니다.

이 종류의 설정에 대한 정보를 찾을 수없는 것 같습니다. 이 방법이나 더 나은 방법으로 접근 할 수있는 방법이나 라이브러리가 있습니까?

+0

두 번째 스크립트에서 플라스크 또는 다른 것을 실행하고 매개 변수를 http 매개 변수로 받아들이는 것에 대해 생각해 보셨습니까? – JoelWilson

답변

8

소켓 연결을 사용합니다. 기본적으로 당신은 차단 호출을 한 번

import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind(("localhost", 9988)) 
s.listen(1) 

while True: 
    conn, addr = s.accept() 
    data = conn.recv(1024) 
    conn.close() 
    my_function_that_handles_data(data) 

s.accept()에서 하나 개의 연결이 걸리는 매우 간단한 서버입니다 쓰고있다. 연결을 기다립니다. 그런 다음 연결에 대한 읽기를 수행합니다. 이 경우 우리는 매개 변수의 길이가 단지 1024 바이트라고 가정합니다. 그런 다음 소켓에서받은 데이터로 무언가를 수행하고 다른 연결을 기다립니다.

클라이언트는 다음과 같이 수 :

import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(("localhost", 9988)) 
s.sendall('My parameters that I want to share with the server') 
s.close() 

이것에 대해 좋은 점은 향후 클라이언트와 서버가 더 이상 동일한 시스템에서 실행되는 다음가 "localhost"을 변경하는 간단한 문제 없다 경우이다 당신이 치려고하는 실제 IP 주소 또는 도메인 이름.

+0

이것이 완벽 할 것 같아요. 이전에는 소켓을 우연히 만났지만 어떻게 작동하는지, 사용법은 확실하지 않았습니다. 간단한 예제 덕분입니다. 나중에 다시 시도해 보겠습니다. – Ger

+0

소켓은 꽤 유연합니다. 만들 수있는 많은 종류의 소켓이 있습니다. 네트워크를 통해있을 필요는 없습니다. Linux를 사용하는 경우 커널을 통해 라우팅 된 도메인 소켓을 만들 수 있습니다. – aychedee

+0

감사합니다. – Ger

1

당신이 묘사하는 일반적인 개념은 프로세스 간 통신 (Python IPC)이라고합니다.

socketssignals으로 파이썬에서이를 수행 할 수 있습니다.

또한 소켓 위에/사용중인 상위 인터페이스가 있습니다. asyncoreasynchat.

관련 문제