使用 out Shell=True 无法使用子进程查找命令

find command with subprocess not working with out Shell=True

我的代码中有以下几行。我嵌入了一个简短的行,用于获取早于 10 分钟的文件列表。我的子流程一直失败,几乎没有错误。当我给出 Shell=True 时它似乎有效,但我读到使用该选项是非常冒险的,而且我对 Python 很陌生,不想搞砸某些事情我不理解。我曾尝试更改该查找语句中和周围的引号,但它对我没有帮助。你能建议我如何使用 find 命令获取文件列表吗? 我已经研究了这些查找和子进程组合的其他问题,我没有找到任何通配符目录匹配项。我找不到解决方案。

cmd = 'find /myapp/uat/aws/6.3/domains/*/appnodes/*/*/log/bwappnode.log -type f -mmin +10'

 apps_in_proc = subprocess.Popen(cmd,stdout=subprocess.PIPE, universal_newlines=True)

如果它适用于 shell=True,而不是没有,则意味着该模式已扩展为 shell=True

要模拟此行为,只需使用 glob.glob 并像这样编写命令参数列表:

cmd = ['find'] + glob.glob('/myapp/uat/aws/6.3/domains/*/appnodes/*/*/log/bwappnode.log') + ['-type','f','-mmin','+10']

可以很容易地写成纯 python:

import glob,os,time
current = time.time()
old_files = [x for x in glob.glob("/myapp/uat/aws/6.3/domains/*/appnodes/*/*/log/bwappnode.log") if current - os.path.getmtime(x) > 600]