结构检查以查看文件是否有数据



我想检查一个文件里面是否有数据,如果它向我显示了该文件里面的内容,如果没有退出"文件中没有任何内容"。 我正在使用 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)用于类似的目的。 你能帮忙吗?

有一个更简单的命令来做到这一点,它不需要将任何内容保存到文件中:

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 .

这应该有效:

@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。

相关内容

  • 没有找到相关文章

最新更新