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]
任意のアイデア?
おかげ
感謝:)だから、簡単に...しかし、なぜ実際に 'subprocess'に渡される必要のない引用符は理由は? – Samuel
これは、コマンドライン 'rsync -avz -e" ssh -i /home/username/.ssh/identity "〜/ Downloads root @ remove_server:/ lvm/archive/backup'全体がシェルによって解析され、 exec() 'システムコール。私はそれを手動で解析しました。 :-) – phd
'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