2015-10-04 4 views
1

Я пытаюсь настроить задание cron на удаленные файлы rsync (содержащие файлы на корневом уровне) на моем локальном сервере, если я запустил команду в оболочке, она работает. Но если я запускаю это в Python, я попал в странную команду не найдена ошибка:Ошибка Python rsync при чтении файлов удаленного корневого уровня

Это работает, если запустить его в оболочке:

rsync -ave ssh --rsync-path='sudo rsync' --delete [email protected]:/tmp/test2 ./test 

Но это Python скрипт не делает:

#!/usr/bin/python 

from subprocess import call 
.... 
for src_dir in backup_list: 
    call(["rsync", "-ave", "ssh", "--rsync-path='sudo rsync'", "--delete", src_host+src_dir, dst_dir]) 

Он терпит неудачу с:

local server:$ backup.py 
bash: sudo rsync: command not found 
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] 
rsync error: remote command not found (code 127) at io.c(226) [Receiver=3.1.0] 
... 
+0

Можете ли вы установить его на переменную и распечатать вывод – Anekdotin

+0

как установить переменную? Я не уверен, что вы имеете в виду – kengcc

+0

Я не думаю, что вам понадобится sudo для rsync, и эта os.system более проста. – Anekdotin

ответ

0

это, скорее всего, ошибка разнос или что-то маленькое, как отладить команды является обязательно распечатайте. OS.system - отличная альтернатива, которая проще, хотя подпроцесс лучше. Я не использую свой компьютер, чтобы проверить его, но вы можете либо настроить свой подпроцесс таким образом, либо использовать этот пример. Это подразумевает вас на Linux или Mac.

import os 

cmd = ('rsync -ave --delete root' +str(src_host) + str(src_directory) + '' + str(dst_dir)) #variable you can call anytime 
os.system(cmd) # actually performs the command 
print x # how to test and make sure 
Смежные вопросы