Python 结构检查以查看文件是否包含数据

Python 结构检查以查看文件是否包含数据,python,bash,fabric,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"):

我想检查一个文件里面是否有数据,如果它显示了该文件里面的内容,如果没有,则以“文件中没有任何内容”退出。我正在使用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.")
如果命令成功,则返回值的属性为
True
,当
grep
与字符串匹配时(即文件为空时)会发生这种情况

fabric
的文档中搜索,它似乎没有提供类似于
os.path.getsize
的功能,因此您可能无法使用
run
调用命令

另一种方法是使用
统计文件名--format=%s | grep'^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。

file如果文件没有数据,文件名
将打印
文件名:empty
。将它与
grep
放在一起,如果运行(“归档文件名”| grep“文件名:empty”):是的,应该已经看到了。如果出现语法错误,如何运行else语句?谢谢谢谢,但这个答案只与织物1.5x有关-我使用的是1.2。warn_only=True在1.2版上不可用。但是我升级到了1.5版,这个答案确实有帮助,所以你可以得到我的投票。