重命名文件,直到使用Fabric从主机获取文件

时间:2018-11-12 03:03:09

标签: python file-io fabric

我正在从主机获取文件,该文件将被另一个系统使用。我意识到我需要在从远程服务器下载文件时重命名文件,以避免数据损坏。您是否知道有没有一种方法可以实现,可能是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连接和get()方法完成下载,另一项服务将选择该文件,并希望避免下载尚未完成。

2 个答案:

答案 0 :(得分:0)

使用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)

答案 1 :(得分:0)

在下载过程中,我没有找到合适的示例来自动更改扩展名。因此,我弄清楚了这个问题,并使用另一个临时扩展名下载了文件,一旦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)