Я переношу пользовательские карты (например, для карт Google) с моего домашнего сервера на облачный сервер. Кажется, самый быстрый способ их передачи — метод tar ssh pipe.
tar czpf - ./tiles | ssh -i myprivate.key [email protected] "tar xzpf - -C /www/tiles/"
Это прекрасно работает в командной строке, но теперь я хочу, чтобы мой скрипт на Python, который создает плитки, автоматически их выталкивал. Я пытался:
os.system('tar czpf - ./tiles | ssh -i myprivate.key [email protected] "tar xzpf - -C /www/tiles/"')
а также вариант subrprocess.Popen, и они оба копируют все мои фрагменты карты на удаленный сервер, но системная оболочка не закрывается и не возвращает управление скрипту python, поэтому скрипт зависает и не завершается.
Я предполагаю, что что-то происходит с перенаправлением pipe или tar на STDOUT, что не позволяет завершить os.system. Я подумал, что, возможно, удаленный tar, отвечающий за распаковку, ждет большего количества STDIN через канал, но больше ничего не приходит? Я действительно не слишком много знаю об этом и ценю вашу помощь.
Есть ли что-то другое, что я могу сделать, чтобы завершить остальную часть скрипта, но при этом реализовать преимущества метода передачи по каналу tar ssh?
Спасибо!