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