2011-10-21 41 views
2

我試圖執行下面的代碼鏈接一個SSH,CD,然後執行,但它不工作如何subprocess.Popen

p = subprocess.Popen("ssh [email protected] cd /opt/msys/pe2/bin;./perlscript.pl; -a file.csv", 
       shell=True,stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 

    OR: 
    p = subprocess.Popen("ssh [email protected] /opt/msys/pe2/bin/perlscript.pl; -a file.csv", 
       shell=True,stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 

與第一問題是我似乎可以一起鏈ssh之後的命令。第二個是如果我直接調用該文件-a arg找不到該文件,因爲我不在該目錄中。我希望能夠使用cwd參數來打開Popen,但是它失敗了,因爲我沒有ssh進入服務器。

回答

3

嘗試引用命令發送到SSH:

subprocess.Popen('ssh [email protected] "cd /opt/msys/pe2/bin;./perlscript.pl;" -a file.csv' 

否則你告訴當地殼裏做它。

+0

謝謝斯科特,這工作 –

2

子進程不是這個用例的最佳工具。所有進程監視選項(例如wait()terminate())適用於本地進程(ssh會話),而不適用於遠程腳本(例如perl腳本)發生的情況。

我使用fabric來處理正在運行的遠程腳本。比試圖將命令與子過程串起來更容易使用。

+0

很酷,我會檢查一下 –