【发布时间】:2016-09-26 18:25:14
【问题描述】:
我正在尝试使用 subprocess.popen 和 'find' linux 命令查找目录路径中的文件列表,这些文件是在过去 'n' 分钟内创建的。
def Subprocessroutine(n,path):
argf='find '+str(path)+' -maxdepth 1 -mmin -'+str(n)+' -type f -printf "\n%AD %AT %p" | sort'
p=subprocess.Popen(argf,stdout=subprocess.PIPE,shell=True)
soutput,sinput=p.communicate()
return soutput
由于我使用的是简单的查找命令(带有格式化和排序),我是否需要确保我明确地终止子进程?
我使用“查找”命令的原因是: 我需要一个在过去 'n' 分钟内创建的文件列表,结果应该按文件创建排序顺序排列(我无法使用以下代码得到它):
for p, ds, fs in os.walk(dirpath):
for fn in fs:
filepath = os.path.join(p, fn)
if os.path.getmtime(filepath) >= n:
print(datetime.datetime.fromtimestamp(os.path.getmtime(filepath)))
有没有更好的方法来获得结果,而不使用子流程?
我的最终输出应该是这样的:
09/26/1619:41:04.4865673390 /home/Testing/Input/Sep26/HST39_2016-09-26 19:40:03.283121_2016-09-26 19:41:03.283109.csv
09/26/1619:41:04.4875673570 /home/Testing/Input/Sep26/HST40_2016-09-26 19:40:03.283561_2016-09-26 19:41:03.283552.csv
09/26/1619:41:04.4885673750 /home/Testing/Input/Sep26/HST41_2016-09-26 19:40:03.283988_2016-09-26 19:41:03.283980.csv
09/26/1619:41:04.4895673930 /home/Testing/Input/Sep26/HST42_2016-09-26 19:40:03.284408_2016-09-26 19:41:03.284399.csv
09/26/1619:41:04.4905674110 /home/Testing/Input/Sep26/HST43_2016-09-26 19:40:03.284852_2016-09-26 19:41:03.284843.csv
09/26/1619:41:04.4915674290 /home/Testing/Input/Sep26/HST44_2016-09-26 19:40:03.285295_2016-09-26 19:41:03.285288.csv
【问题讨论】:
-
您尝试的代码有什么问题?看我的回答
-
@urban 您回答的第二部分是完美的。我无法使用 os.path 以“文件创建”排序顺序获得结果列表。对结果列表进行排序解决了它。非常感谢。
-
@Pynood :) 不用担心,看看纪元时间,我很抱歉我使用了
lambda(我倾向于不喜欢它们......)但在这种情况下正是你需要 - 如果您对答案的 cmets 有疑问,请告诉我,我可以澄清更多。 -
@urban 我实际上已经在我的程序中更靠后的列表中使用了排序选项!。在代码的这一点上,我只是没有想到它是一个选项。对我来说,python 编码只有几个月的时间(来自大型机背景!!)。我发现对列表内容进行排序的选项非常有用。今后将牢记此选项。
标签: python linux subprocess os.path