2009-08-26 10 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] 

私がecho $SVN_INFOになると結果が出ます。

パス:。 URL: // SVN/RND-プロジェクト/テスト/ pythonの リポジトリのルート: // SVN/RND-プロジェクトリポジトリ UUID: d07d5450-0a36-4e07-90d2-9411ff75afe9 リビジョン:140ノードの種類:ディレクトリ スケジュール:通常最後に変更著者:140 最終変更日:2009-06-09 14時13分29秒 0200(火曜、2009年6月9日)

しかしパイソン ロイ・ファン・デル・ファルク最終改訂変更しましたスクリプトは以下を出力します。

パス:

なぜこれがあるとどのように私はこの問題を解決することができますか? $ SVN_INFO変数は文字列型ではありませんか?

私はサブプロセスモジュールとPopen関数について知っていますが、pythonスクリプトは別のサーバーで実行されているので、これは解決策ではないと思います。

+0

なぜafの答えが検証されたのですか?実際には動作しません。変数を一重引用符で囲むことはできません( 'echo '$ PATH')。 – tonfa

答えて

0

はい、python/runtest.pyに入力を引用する必要があります。そうしないと、argv [1]は最初のスペースまでしか取得しないからです。このように:あなたは変数にスペースがあるので

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

これはテストしましたか?一重引用符を使用すると、変数XAS_SVNは展開されません。 – tonfa

+0

はい、そうです。編集されていない回答をテストすると少し混乱していましたが、これは今のようでした。私は別のシェルでそれをテストし、別々に引用符を処理しました。私の悪い。 –

+0

最初に動作しませんでしたが、編集後は完全に動作します。ありがとう! –

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

はい!他の答えよりはるかに良い –

関連する問題