Fabric检查看文件是否有数据

时间:2012-11-20 17:14:48

标签: python bash fabric

我想检查一个文件中是否有数据,如果它显示了该文件中的内容,如果没有显示"文件中没有任何内容"。我正在使用Fabric 1.2在远程服务器上执行此操作。

我正在尝试这个:

    def test():
        run("cat myfile.txt | awk '{print $1}' > /dir/newfile.txt")
    if run("test -s /dir/newfile.txt || cat /dir/newfile.txt"):
            else run("echo Nothing in the file")

我知道这不是最好的方法,我知道Python使用os.path.getsize(path)来达到类似的目的。你能帮忙吗?

2 个答案:

答案 0 :(得分:4)

有一个更简单的命令可以执行此操作,并且不需要将任何内容保存到文件中:

file 'the-filename' | grep 'the-filename'

所以,代码是:

if run("file 'the-filename' | grep 'the-filename'", warn_only=True).succeeded:
    print("The file 'the-filename' is empty.")
else:
    print("The file 'the-filename' is not empty.")

如果命令成功,返回值的succedeed属性为True,这在grep匹配字符串时发生(即文件为空时)。

fabric的文档中搜索它似乎不提供像os.path.getsize这样的函数,因此您可能无法使用run调用命令。

另一种方法是使用stat 'the-filename' --format=%s | grep '^0$'并检查succeeded

答案 1 :(得分:0)

这应该有效:

@task
def empty():
    some_file = 'some_file'
    run(('if [ -s "%s" ]; then'
         ' cat "%s"; '
         'else'
         ' echo "EMPTY FILE"; '
         'fi') % (some_file, some_file))

我在Redhat Unix系统上测试过它,只需在一次调用中使用bash if语句和cat。