Переименовывайте файл, пока не получите файл с хоста с Fabric - PullRequest
0 голосов
/ 12 ноября 2018

Я получаю файлы с хоста, которые будут использоваться для другой системы. Я понял, что мне нужно переименовывать файлы во время их загрузки с удаленного сервера, чтобы избежать повреждения данных. Знаете ли вы, есть ли способ добиться этого, может быть, функция get() в сочетании со StringIO? или не возможно с тканью?

Отредактировано: Пожалуйста, получите образец моего кода.

# ~/fabfile.py
from fabric.api import task, env, run, settings, cd, put, get, execute

@task
def send_files():
'''
Send the downloaded files (found.txt) from remote to the server
'''
#  Get the sorted list of filenames (to send the files in order)
with settings(war_only=True):
    with cd(REMOTE_DIR):
        sorted_list = sort_files()
        for file in sorted_list:
            print(file)
            file = file.replace('\n', '')
            #Something here to change the extension
            #when the download is complete change to the original extension
            # Example
            # get 427783.zip
            # change to 427783.crdownload
            # back to 427783.zip when is done.
           get(REMOTE_DIR + DESTINATION + '/' + file, INPUT_FOLDER + '\\' + file)

Я думаю, что мне нужно повторить мой вопрос: я хотел бы знать, когда загрузка будет завершена с использованием ftp-соединения Fabric и метода get (), другой сервис подберет файл и хотел бы избежать загрузки. еще не завершено.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Я не нашел подходящего примера для автоматического изменения расширения, когда загрузка еще продолжается. Итак, я разобрался с этим и скачал файл с другим временным расширением, как только функция get () закончит с фабрикой следующую команду, поэтому я воспользуюсь этим и переименую файл.

Как это:

def rename_file(original, output):
    try:
        os.rename(original, output)
    except WindowsError:
        os.remove(output)
        os.rename(original, output)

@task
def send_files():
    with settings(war_only=True):
        with cd(REMOTE_DIR):
            sorted_list = sort_files()
            for file in sorted_list:
                old_file = REMOTE_DIR + DESTINATION + '/' + file
                temp_file = INPUT_OTDF_FOLDER + '\\' + file + '.tmp'

                get(old_file, temp_file)
                rename_file(temp_file, new_file)
0 голосов
/ 13 ноября 2018

Использование wget решит вашу проблему. Вы можете сделать следующее:

 with connection(host=host, user=user) as c:
    save_path = '/var/www/new_name.extension'
    source_path = 'where_your_file_resides' 
    c.run('wget -p -O %s %s' %(save_path, source_path)
...