5

サブプロセスと popen を介して rsync コマンドを実行しようとしています。問題が発生した場所に rsh サブコマンドを配置しない限り、すべて問題ありません。

from subprocess import Popen
args = ['-avz', '--rsh="ssh -C -p 22 -i /home/bond/.ssh/test"', 'bond@localhost:/home/bond/Bureau', '/home/bond/data/user/bond/backups/']

p = Popen(['rsync'] + args, shell=False)
print p.wait()

#just printing generated command:
print ' '.join(['rsync']+args)

「--rsh="ssh -C -p 22 -i /home/bond/.ssh/test"」をさまざまな方法でエスケープしようとしましたが、問題ではないようです。

rsync: Failed to exec ssh -C -p 22 -i /home/bond/.ssh/test: No such file or directory (2) というエラーが表示される

その時点で出力したのと同じ引数をコピーして貼り付けると、コマンドが正しく実行されます。

ありがとう。

4

2 に答える 2

5

代わりに使用するとどうなりますか'--rsh=ssh -C -p 22 -i /home/bond/.ssh/test'(二重引用符を削除しました)。

これでうまくいくと思います。行をコマンドラインにカット/ペーストすると、シェルは二重引用符を認識して削除しますが、それらを使用して-C -petc. が別の引数として解釈されるのを防ぎます。リストを使用して呼び出すsubprocess.Popenと、シェルの助けを借りずに引数が既に分割されているため、引数を分割する場所を保持するために引用符を使用する必要がなくなります。

于 2012-09-19T13:47:02.390 に答える
0

同じ問題を抱えていたので、この問題を広範囲にグーグル検索しました。サブプロセスを使用して ssh に引数を渡すことはできないようです。最終的に、rsync コマンドを実行するシェル スクリプトを作成しました。このスクリプトには、subprocess.call(['rsyncscript', src, dest, sshkey]) を介して引数を渡すことができます。シェル スクリプトは次のとおりです。 /usr/bin/rsync -az -e "ssh -i $3" $1 $2

これで問題は解決しました。

于 2016-08-20T16:53:05.823 に答える