Python Fabric:如何获取目录的文件列表

13 投票
2 回答
12014 浏览
提问于 2025-04-16 21:07

我正在用python-fabric库开发一个远程服务器管理工具,想要找到一个好的方法来获取远程服务器上某个目录的文件列表。目前我使用的是run("ls dir")命令,然后手动分割返回的字符串,这样做感觉非常糟糕,而且依赖于具体的系统架构。fabric.contrib.files似乎也没有什么有用的东西……

非常感谢大家的建议。

谢谢,
R

2 个回答

8

我觉得最好的办法是写一个BASH(其他的命令行工具也差不多)的一行命令,来获取一个文件夹里的文件列表。

for i in *; do echo $i; done

所以,这里有一个完整的解决方案,可以返回文件的绝对路径:

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()
17

这段代码有什么问题呢?

output = run('ls /path/to/files')
files = output.split()
print files

可以查看关于run()的文档,里面有更多的技巧。

撰写回答