0

I have a long-running Python program on a server that already listens for messages on one serial port and forwards them out another serial port.

What do I need to do to allow that program to accept data from a web server (that ultimately gets that data from a web browser on a laptop)?

The options I've seen so far are:

  • flask() The solution at " Communicating with python program running on server " server doesn't seem to work for me, because (I may be doing this wrong) the long-running Python program can't seem to grab port 80, I guess because the web server is already running on port 80 (serving other pages).

  • Have a CGI script that writes the data to the file, and the long-running script reads the data from that file. I'm a little reluctant to do this on a system where flash wear-out may be a concern.

  • Somehow (?) convert the long-running script to a FastCGI script that includes everything it used to do plus new stuff to accept data from the web server.

  • Somehow (?) convert the long-running script to a WSGI script that includes everything it used to do plus new stuff to accept data from the web server.

  • Write a brief web script that the web server starts up, that communicates with a long-running script using asynchat / asyncore / sockets / twisted , which seem designed for communication between two different computers, and so seems like overkill when talking between a long-running Python script and a web server (perhaps with a short-time CGI script or FastCGI script between them) running on the same server.

  • Perhaps some other option?

Is there a standard "pythonic" way for a web server to hand off data to a Python program that is already up and running? (Rather than the much more common case of a web server starting a Python program and hand off data to that freshly-started program).

(Details that I suspect aren't relevant: my server runs Lighttpd on Ubuntu Linux running on a Beaglebone Black).

(Perhaps this question should be moved to https://softwareengineering.stackexchange.com/ ?)

Community
  • 1
  • 1
David Cary
  • 5,250
  • 6
  • 53
  • 66

1 Answers1

0

You could setup your python process to use any other port (f.e. 8091). Than configure your webserver to forward certain (or all) requests to that port using proxypas. Example for Apache:

<VirtualHost yourdomain.for.python.thread>
    ServerName  localhost
    ServerAdmin webmaster@example.com

    ProxyRequests off
    ProxyPass * http://127.0.0.1:8091
</VirtualHost>

I've done this before for quickly getting a Django server in development mode to show pages via a webserver. If you actually want to serve html content, this is not the most efficient way to go.

HSquirrel
  • 839
  • 4
  • 16