2012-09-12 2 views
7

Ich muss einen SVN Pre-Commit Hook implementieren, der ein Skript ausführt, das selbst in SVN gespeichert ist.Pipe STDIN zu einem Skript, das selbst an den Python-Interpreter weitergeleitet wird?

kann ich den svn cat Befehl Rohr, das Skript an den Interpreter Python verwenden, wie folgt:

svn cat file://$REPO/trunk/my_script.py | python - --argument1 --argument2 

jedoch my_script.py sich auf Daten erfordert STDIN verrohrt werden.

Diese Daten werden nicht in einer Datei gespeichert; Es ist im Netzwerk gespeichert. Ich würde es vorziehen, nicht die Daten in eine temporäre Datei zu haben, zum Download, wie es normalerweise könnte ich eine Pipe an einem Python-Programm:

curl http://example.com/huge_file.txt | python my_script.py 

Ich bin nicht sicher, wie diese beiden Rohre zu verbinden.

+0

gleichwertig Sie verwenden versucht haben, '>'? –

+0

Schreiben Sie ein Wrapper-Skript, das Pysvn verwendet, um die Datei einzulesen, dann kompilieren und ausführen, so dass Ihre Standardeingabe frei ist? – agf

Antwort

10

Ich habe herausgefunden, wie das geht, ohne temporäre Dateien zu erstellen, aber nicht unbedingt mit "Pipes".

curl http://example.com/huge_file.txt | python <(svn cat file://$REPO/trunk/my_script.py) --argument1 --argument2

I verwendet, um den „anonymous Dateideskriptor“ Konstrukt in heftigen Schlag, der anstelle jeden Dateipfad verwendet werden kann.

z. python my_script.py würde python <(cat my_script.py)

0

Ich glaube nicht, dass das möglich ist. Sie füttern das Skript als Standardeingabe für den Python-Interpreter. Dies bedeutet, dass der Python-Interpreter bereits an einen Eingabestream angehängt ist. Ich glaube nicht, dass der Inhalt des Skripts eine zweite Standardeingabe zum Lesen erzeugen kann.

Verwandte Themen