find command with subprocess not working with out Shell=True(查找带有子进程的命令不适用于 Shell=True)
问题描述
我的代码中有以下几行.我嵌入了一条短线,用于获取超过 10 分钟的文件列表.我的子流程失败了,几乎没有错误.当我给 Shell=True 时它似乎有效,但我读到使用该选项非常冒险,而且我对 Python 很陌生,不想弄乱我不理解的东西.我曾尝试在 find 语句中和周围更改引号,但这对我没有帮助.您能否建议我如何使用 find 命令获取文件列表.我用这些 find 和 subprocess 组合研究了其他问题,我没有找到任何通配符目录匹配项.我找不到解决方案.
I have below lines in my code. I have embedded a short a line which fetches the list of files that are older than 10 mins. My sub process have been failing with few errors. It seems to work when I give Shell=True, but I read that it is a very risky to use that option and I am very new to the Python, Don't want to mess up with something I am not understanding. I have tried changing quotes with in and around that find statement, but its not helping me. can you please suggest how could I get the list of files using find command. I have looked into other questions with these find and subprocess combinations, I did not find any wildcard directory matches. I could not find solution for this.
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 扩展的
.
if it works with shell=True
, and not without, that means that the pattern is expanded with shell=True
.
要模拟这种行为,只需使用 glob.glob
并像这样编写命令参数列表:
To emulate this behaviour just use glob.glob
and compose your command argument list like this:
cmd = ['find'] + glob.glob('/myapp/uat/aws/6.3/domains/*/appnodes/*/*/log/bwappnode.log') + ['-type','f','-mmin','+10']
在纯python中可以很容易地编写:
Which could be written very easily in pure 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]
这篇关于查找带有子进程的命令不适用于 Shell=True的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:查找带有子进程的命令不适用于 Shell=True
基础教程推荐
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01
- 筛选NumPy数组 2022-01-01
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01
- 用于分类数据的跳跃记号标签 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01
- 线程时出现 msgbox 错误,GUI 块 2022-01-01