使用 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]
我的代码中有以下几行。我嵌入了一个简短的行,用于获取早于 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]