2012-01-06 85 views
4

我有興趣編寫腳本,以便腳本的唯一副本駐留在本地計算機上,但腳本在遠程計算機上執行,可能遠程計算機執行其他遠程機器上的腳本(即分佈式調用樹中的2級或更多級遞歸)。在遠程機器上遞歸執行本地定義的python腳本

實現此目的的一種方法是將腳本複製到遠程計算機中,然後在第二步中通過ssh執行遠程執行,將適當的參數傳遞給腳本,該腳本將爲每個遠程調用傳遞不同的參數,每個將通過類似進行:

subprocess.call(['ssh', <[email protected]>, 'python scriptname.py <params>']) 

是否有可能在一個步驟不必事先複製的Python腳本實現這一目標。顯然,我仍然需要以某種方式將腳本中的代碼作爲遠程調用的一部分來傳輸,但最好不要運行兩個單獨的命令,甚至可能需要三分之一來清理遠程文件機器在腳本運行後。

回答

2

不,您將無法一步完成此操作(除了python -c 'print "hello world"'也許)。但是fabric可能會讓你的生活變得更輕鬆。

+0

謝謝,我有一個概念驗證使用'-c'並傳遞腳本源代碼作爲參數用於遞歸調用。 – jonderry 2012-01-07 00:57:49

0

我知道sshuttle做這個「引導」作爲其正常執行的一部分。它假設在ssh連接的遠端存在Python解釋器,並上傳代碼以運行。

我還沒有調查代碼來找出它究竟做了什麼,但它應該是合理的直接找到。

1

Python二進制文件確實有一個-c選項,它允許您傳遞有效的Python代碼作爲參數。例如:

$ python -c "print 'hello'; print 'world'" 

打印

hello 
world 

您可以使用腳本具有相關性或對這個太複雜了,但它並處理更多的普通的命令。

0

結帳Fabric。它是「編寫和執行Python函數或任務以自動化與遠程服務器進行交互的Python工具」。 #

相關問題