2017-02-07 3 views
1

Lassen Sie uns sagen, ich habe ein Python-Skript namens service.py als eine Art Dämon im Hintergrund ausgeführt wird, und ich möchte es durch Rohrleitungen Text in seine stdin einige Informationen geben:Rohr Text stdin Python Prozess der laufenden

> pgrep -f service.py 
[pid of process] 
> echo -e 'test\n' > /proc/[pid of process]/fd/0 

Mein python-Skript sollte nehmen, was in seiner stdin und zuweisen auf eine Variable inp:

import sys 
while True: 
    inp = sys.stdin.readline() 
    #do something with inp 

Aber wenn ich die oben tun, er druckt nur den stdin-Stream:

> python service.py 
test    

Der Effekt ist der gleiche, wenn ich buchstäblich dies nur in meinem Skript

import sys 
inp = sys.stdin.readline() #sys.stdin.readline() never returns 
          #script never exits 

Was mache ich falsch?

+0

Haben Sie versucht, Ihren Code zu debuggen, um zu sehen, ob 'inp' tatsächlich einem Wert zugewiesen wird? Problem könnte woanders im Code der 'while' Schleife sein. – Reaper

+0

Nein, sys.stdin.readline() kehrt nie zurück, alles, was ich hinterher hinlege, wird niemals ausgeführt. – encomiastical

+0

Mögliches Duplikat von [Wie schreibe ich Daten in den STDIN des vorhandenen Prozesses von einem externen Prozess?] (Http://stackoverflow.com/questions/5374255/how-to-write-data-to-existing-processs-stdin-from-external -process) – languitar

Antwort

0

können Sie verwenden Named Pipe mit mkfifo (https://serverfault.com/questions/443297/write-to-stdin-of-a-running-process-using-pipe)

, dass Sie mit Blättern:

mkfifo yourfifo 
cat > yourfifo & 
mypid=$! 
yourprogram < yourfifo 

Jetzt können Sie Daten an Ihr Programm geschickt mit

`echo "Hello World" > yourfifo` 

(https://askubuntu.com/questions/449132/why-use-a-named-pipe-instead-of-a-file)

der Schlüssel ist, dass stdin als Rohr bekannt sein oder Named Pipe diesem Grund sollten Sie mkfifo verwenden können, finden auch How to write data to existing process's STDIN from external process? (Python Teil) und How to write data to existing process's STDIN from external process? (os Teil)

Verwandte Themen