在python中使用子进程库验证文件或文件夹的存在性

Verifying the existance of a file or folder using subprocess library in python

我可以很容易地使用OS库检查文件或文件夹的存在。以下两个链接描述了目录存在文件存在

我正试图使用子进程库来执行相同的操作

我已经试过几种方法了

1-status = subprocess.call(['test','-e',]),它总是返回1,不管我在路上经过什么。

2-使用GetStatusOutput,

/bin/sh: 1: : Permission denied

1
2
3
status, result = subprocess.getstatusoutput([<path>])
print(status)
print(result)

which is working fine because status variable returns 126 if the file/folder exist and 127 when the file/folder doesn't exist. Also the result variable contains message but the"result" variable contains the message : Permission denied

但第二个解决方案在我看来像是一个黑客。他们这样做更好吗?


test命令是一个shell内置命令,在许多平台上,您不能作为独立的命令运行。

如果使用shell=True来使用shell来运行此命令,则应传入单个字符串,而不是令牌列表。

1
status = subprocess.call("test -e '{}'".format(path), shell=True)

如果path包含任何单引号,这将生成一个格式错误的命令;如果要完全正确和健壮,请尝试path.replace("'", r"\'"),或者使用现有的引用函数之一正确地转义所传入命令中的任何shell元字符。

subprocess库现在提供了一个函数run(),它比旧的遗留call()函数稍微简单一些;如果向后兼容性不重要,您可能应该切换到这个函数…或者,正如一些评论者已经恳求您的那样,当可移植的、轻量级的本机python解决方案可用时,不要对此任务使用subprocess


如评论部分所述

1
status = subprocess.call(['test','-e',<path>])

如果使用"shell=true",则可以使用shell扩展

尽管使用os.path可能更有效。