2017-06-08 14 views
0

subprocessモジュールを使用してrsyncを実行する自動バックアップスクリプトがあります。 ssh識別ファイルを指定する新しい要件が完了するまでは問題ありませんでした。Pythonのサブプロセスを使用して引用符付き引数を使用してrsyncを実行しています

rsyncマニュアルによると、SSHのアイデンティティが引用符で囲まれた文字列として渡される必要があります。

-e "ssh -i /home/username/.ssh/identity" 

しかし、これはsubprocessで実行に失敗します:

subprocess.Popen(['rsync', '-avz', '-e "ssh -i /home/username/.ssh/identity"', '~/Downloads', '[email protected]_server:/lvm/archive/backup']) 
<subprocess.Popen object at 0x7fd111939710> 
rsync: Failed to exec ssh -i /home/username/.ssh/identity: No such file or directory (2) 
rsync error: error in IPC code (code 14) at pipe.c(85) [sender=3.1.0] 
rsync: connection unexpectedly closed (0 bytes received so far) [sender] 
rsync error: error in IPC code (code 14) at io.c(226) [sender=3.1.0] 

任意のアイデア?

おかげ

答えて

1

subprocess.Popen(['rsync', '-avz', '-e', 'ssh -i /home/username/.ssh/identity', '~/Downloads', '[email protected]_server:/lvm/archive/backup'])

+0

感謝:)だから、簡単に...しかし、なぜ実際に 'subprocess'に渡される必要のない引用符は理由は? – Samuel

+0

これは、コマンドライン 'rsync -avz -e" ssh -i /home/username/.ssh/identity "〜/ Downloads root @ remove_server:/ lvm/archive/backup'全体がシェルによって解析され、 exec() 'システムコール。私はそれを手動で解析しました。 :-) – phd

+1

'shlex.split( 'rsync -avz -e" ssh -i /home/username/.ssh/identity "〜/ダウンロードroot @ remove_server:/ lvm/archive/backup')' => [ rshync '、 ' -avz '、 ' -e '、 ' ssh -i /home/username/.ssh/identity '、 '〜/ Downloads '、 'ルート@ remove_server:/ lvm/archive/backup '] – phd

関連する問題