Python Fabric:如何检索目录的文件列表

Ric*_*icw 12 python file dir fabric filelist

我正在使用python-fabric库构建一个远程服务器管理工​​具,并且正在寻找一种检索远程服务器上目录的文件列表的好方法.目前我正在使用run("ls dir")并且手动拆分返回字符串,这看起来很可怕并且非常依赖于体系结构.fabric.contrib.files似乎不包含任何使用..

建议非常感谢.

干杯,R

jat*_*ism 17

这有什么问题?

output = run('ls /path/to/files')
files = output.split()
print files
Run Code Online (Sandbox Code Playgroud)

查看文档run()了解更多技巧.

  • 它的错误在于"ls"的输出完全取决于您正在使用的环境,因此它不是您想要的独立于架构的. (2认同)
  • 您要支持多少种系统类型?使用条件处理输出可能会更好.还有`ls -1`(每行列出一个文件),它应该在所有基于POSIX的系统上表现相同. (2认同)

bro*_*dul 8

我认为最好的方法是编写一个BASH(其他shell表现相似)oneliner.检索目录中的文件列表.

for i in *; do echo $i; done
Run Code Online (Sandbox Code Playgroud)

所以返回绝对路径的完整解决方案:

from fabric.api import env, run, cd

env.hosts = ["localhost"]
def list_dir(dir_=None):
    """returns a list of files in a directory (dir_) as absolute paths"""
    dir_ = dir_ or env.cwd
    string_ = run("for i in %s*; do echo $i; done" % dir_)
    files = string_.replace("\r","").split("\n")
    print files
    return files

def your_function():
    """docstring"""
    with cd("/home/"):
        list_dir()
Run Code Online (Sandbox Code Playgroud)