2012-09-12 45 views
7

我需要實現一個SVN預先提交鉤子,它執行一個腳本,它本身存儲在SVN中。將STDIN管道連接到本身被管理到Python解釋器的腳本?

我可以使用svn cat命令管道將腳本Python解釋,如下:

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

然而,my_script.py本身需要上STDIN被管道輸送的數據。

該數據未存儲在文件中;它存儲在網絡上。我寧願不具有對數據下載到臨時文件,因爲通常我會呢管道Python程序:

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

我不知道如何這兩個管道的結合。

+0

您是否嘗試過使用'>'? –

+0

編寫一個使用pysvn讀取文件的包裝腳本,然後編譯並執行它,所以你的標準輸入是免費的? – agf

回答

10

我想出瞭如何在不創建任何臨時文件的情況下執行此操作,但並非嚴格使用「管道」。

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

我用「匿名文件描述符」構建猛砸,它能夠代替任何文件路徑中使用。

E.g. python my_script.py 將等於 python <(cat my_script.py)

0

我不認爲這是可能的。您將腳本作爲標準輸入提供給python解釋器。這意味着python解釋器已經連接到輸入流。我不認爲腳本內容可以創建第二個標準輸入來讀取。