Senden Sie Befehle von der Befehlszeile zu einem laufenden Python-Skript in Unix

Ich möchte ein Skript erstellen, das beim Laufen von anderen Skripten gesteuert werden kann. Zum Beispiel möchte ich mein Skript so ausführen:

~: Server & 

Und in der Lage sein, eine seiner Funktionen wie:

 ~: client func1 

Bei meinen Recherchen finde ich Signalmodul, das so etwas wie ich will, aber es sind Signale vordefiniert und ich kann keine Signale von mir selbst senden.

Ich habe zwar eine Client / Server-Implementierung mit einem Netzwerk-Framework, aber ich denke, es ist zu viel für die Fähigkeiten, die ich mein Skript haben möchte.

Danke euch allen.

  • Nginx, Django, Gunicorn, Ubuntu 14.04 (13: Permission verweigert) beim Verbinden mit Upstream
  • Wie laufe ich Selen in Xvfb?
  • Wie kann ich Signalhandler zu einer in Py3k / Python geschriebenen Shell hinzufügen?
  • Wie kann ich mein Python-Skript stoppen, wenn ein anderes Python-Skript läuft?
  • Kann ich einen Alias ​​verwenden, um ein Programm aus einem Python-Skript auszuführen
  • Ziehen Sie Java-Fehler-Stacks aus Protokolldateien heraus
  • Ändere datetime auf Unix Zeitstempel in Python
  • ImportError: Kein Modul mit dem Namen simplejson
  • 2 Solutions collect form web for “Senden Sie Befehle von der Befehlszeile zu einem laufenden Python-Skript in Unix”

    Wenn Sie nur versuchen, Befehle ein-Richtung zu einem Server zu senden, ist es einfacher als Sie denken , mit Python's Sockets . Die Code-Samples sind natürlich Barebones in dem Sinne, dass sie keine Fehlerbehandlung durchführen und nicht mehrmals recv , um sicherzustellen, dass die Nachricht vollständig ist. Dies ist nur, um Ihnen eine Vorstellung davon, wie wenige Zeilen Code benötigt, um Befehle zu verarbeiten.

    Hier ist ein Server-Programm, das einfach Nachrichten und Drucke an stdout empfängt. Beachten Sie, dass wir Threading verwenden, damit der Server mehrere Clients gleichzeitig anhören kann.

     import socket from threading import Thread MAX_LENGTH = 4096 def handle(clientsocket): while 1: buf = clientsocket.recv(MAX_LENGTH) if buf == '': return #client terminated connection print buf serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) PORT = 10000 HOST = '127.0.0.1' serversocket.bind((HOST, PORT)) serversocket.listen(10) while 1: #accept connections from outside (clientsocket, address) = serversocket.accept() ct = Thread(target=handle, args=(clientsocket,)) ct.run() 

    Hier ist ein Client-Programm, das Befehle ansendet.

     import socket import sys HOST = '127.0.0.1' PORT = 10000 s = socket.socket() s.connect((HOST, PORT)) while 1: msg = raw_input("Command To Send: ") if msg == "close": s.close() sys.exit(0) s.send(msg) 

    Also musst du mit einem laufenden prozess reden Was ist mit der Idee von Unix Domain Socket?

    In deinem Server kannst du einen Sockel auf einem Pfad deines Unix-Dateisystems aufbauen und dann mit diesem Socket in deinem Client sprechen, wie in diesem Link beschrieben, den ich gegoogelt habe:

    http://pymotw.com/2/socket/uds.html

    Python ist die beste Programmiersprache der Welt.