3

我想检查一个文件里面是否有数据,如果它告诉我那个文件里面有什么,如果没有以“文件中没有任何内容”退出。我正在使用 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) 用于类似目的。你能帮忙吗?

4

2 回答 2

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.

于 2012-11-20T17:48:42.460 回答
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。

于 2012-11-20T17:58:17.117 回答