2013-09-04 43 views
6

Tôi có một tình huống mà tôi cần một script python để chạy trong một vòng lặp liên tục, và tôi cần chuyển các tham số vào nó từ một kịch bản khác sẽ chạy khi hành động xảy ra.Làm thế nào để có được một kịch bản python để nghe đầu vào từ một kịch bản khác

Tập lệnh thứ hai sẽ được kích hoạt bởi một trang web sử dụng cgi, tôi có tiền phạt hoạt động này. Vòng lặp liên tục sẽ đưa vào các tham số được đọc bởi kịch bản cgi (và sau đó gửi thông tin qua cổng nối tiếp).

Đối với vấn đề cụ thể, tôi không thể có tập lệnh cgi gửi dữ liệu qua nối tiếp trực tiếp vì mỗi lần chạy nó sẽ reset cổng nối tiếp.

Tôi dường như không tìm thấy bất kỳ thông tin nào về loại thiết lập này. Có bất kỳ phương pháp hoặc thư viện nào tôi có thể xem xét cho cách tiếp cận này hay cách tốt hơn không?

+0

Bạn đã từng nghĩ đến việc chạy tập lệnh thứ hai chạy bình hay thứ gì đó và chấp nhận tham số như http get parameters? – JoelWilson

Trả lời

8

Tôi sẽ sử dụng kết nối ổ cắm. Về cơ bản, bạn đang viết một máy chủ rất đơn giản chỉ nhận một kết nối tại một thời điểm

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() là một cuộc gọi chặn. Nó chờ kết nối. Sau đó, bạn đọc trên kết nối. Trong trường hợp này, chúng tôi giả sử chiều dài của các tham số chỉ là 1024 byte. Sau đó, chúng tôi làm điều gì đó với dữ liệu chúng tôi nhận được từ ổ cắm và chờ kết nối khác.

Các khách hàng có thể nhìn như thế này:

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() 

Những điều tốt đẹp về việc này là trong tương lai nếu các client và server không còn chạy trên cùng một máy thì đó là một vấn đề đơn giản của việc thay đổi "localhost" để địa chỉ IP thực tế hoặc tên miền bạn sẽ nhấn.

+0

Điều này có vẻ như nó có thể là hoàn hảo, tôi đã tình cờ gặp ổ cắm trước nhưng không chắc họ sẽ làm việc như thế nào hoặc cách sử dụng chúng, cảm ơn ví dụ đơn giản. Sẽ dùng thử sau này. – Ger

+0

Ổ cắm khá linh hoạt. Có rất nhiều loại ổ cắm khác nhau mà bạn có thể tạo. Họ không phải ở bên kia mạng. Nếu bạn đang sử dụng Linux, bạn có thể tạo một ổ cắm miền được định tuyến thông qua hạt nhân. – aychedee

+0

Làm việc một sự quyến rũ, cảm ơn! – Ger

1

Khái niệm chung về những gì bạn mô tả được gọi là Giao tiếp giữa các quá trình (Python IPC).

Trong trăn, điều này có thể được thực hiện bởi socketssignals.

Ngoài ra còn có các giao diện cấp cao hơn được xây dựng trên đầu/sử dụng ổ cắm; asyncoreasynchat.

Các vấn đề liên quan