2009-08-26 41 views
1

我對編程相當陌生,並且搜索了互聯網以將bash輸出傳遞給Python腳本。將bash輸出傳遞給python腳本的問題

我想出了這個在bash中。

XAS_SVN=`svn info` 
ssh [email protected] "python/runtests.py $XAS_SVN" 

而這在python中。

import sys 
print sys.argv[1] 

當我I echo $SVN_INFO我得到結果。

路徑:。網址: // SVN/RND項目/測試/蟒蛇 庫根: // SVN/RND項目庫 UUID: d07d5450-0a36-4e07-90d2-9411ff75afe9 修訂:140節點類型:目錄 計劃正常上次更改作者:羅伊 範德瓦爾克上次更改修訂:140 上次更改日期:2009-06-09 14點13分29秒 +0200(週二,09六月2009)

然而蟒蛇腳本只是打印以下內容。

路徑:

這是爲什麼,我該如何解決這個問題?我的$ SVN_INFO變量不是字符串類型?

我知道子進程模塊和Popen函數,但我不認爲這是一個解決方案,因爲python腳本運行在另一臺服務器上。

+0

爲什麼af的答案是有效的,它並不實際工作,你不能在單引號內部展開一個變量(試着'echo'$ PATH')。 – tonfa 2009-08-26 08:29:19

回答

0

是的,你需要把你的輸入引用到python/runtest.py中,否則argv [1]只會把它輸入到第一個空格。就像這樣:

ssh [email protected] "python/runtest.py \"$XAS_SVN\"" 
+0

你測試了這個嗎?如果您使用單引號,變量XAS_SVN將不會被展開。 – tonfa 2009-08-26 08:22:34

+0

是的,的確如此。在測試我未編輯的答案時,我有點混淆,就像現在這樣。我用不同的shell測試了它,並且它以不同的方式處理引號。我的錯。 – 2009-08-26 08:33:10

+0

首先它不起作用,但在編輯完成後,它完美地工作,謝謝! – 2009-08-26 10:19:41

1

既然你在可變空間,你需要逃避他們或閱讀腳本的所有參數:

print ' '.join(sys.argv[1:]) 

但它可能是更好地使用標準輸入/輸出到。溝通,特別是如果可以有一些字符容易受到輸出外殼(如「`$')被解釋 在python腳本做:

for l in sys.stdin: 
    sys.stdout.write(l) 

,並在外殼:

svn info | ssh [email protected] python/runtests.py 
+0

是的!比其他答案好得多 – 2010-02-09 03:57:36