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