获取最新的修改文件并将其作为输入传递给子流程

时间:2015-05-14 03:02:01

标签: python operating-system subprocess motion

我有代码打印激活动作时保存的图像快照的最新文件路径,我正在尝试使用此文件路径作为我代码的下一部分的输入,该代码将图像转换为仅保留蓝色斑点。感谢任何帮助,我是新手代码。

#!/bin/bash/python

import os
from subprocess import  check_call

path = '/..'
os.chdir(path)
files = sorted(os.listdir(os.getcwd()), key=os.path.getmtime)

newest = files[-1]
if newest == "Thumbs.db":
        'newest = files[-1]

newest = [path+"/"+newest]
a = newest

print newest
#####转换为蓝色blob
check_call(["sudo","convert","imgIn.jpg", "-posterize","2","imgOut.jpg"])

check_call([ "sudo",'convert', 'imgIn.jpg', '-matte', '(', '+clone', '-fuzz',     57%', '-opaque', 'black', '-transparent', 'blue', ')', '-compose', 'DstOut', '-    composite', 'imgOut.jpg'])

如何使用最新的文件路径imgIn.jpg?

1 个答案:

答案 0 :(得分:1)

编写一个名为get_latest_file()的函数:

from os.path import isabs, getmtime
from os import getcwd, listdir, path


def get_latest_file(p):
    if not isabs(p):
        p = path.join(getcwd(), p)
    files = sorted([path.join(p, x) for x in listdir(p)], key=getmtime)
    return (files and files[-1]) or None

这将为您提供按修改时间排序的最新文件,并返回给定目录的最新/最新匹配文件。

注意:在上面的函数中需要注意的一件事是你需要建立一个绝对路径列表,以使排序键getmtime()正常工作,否则它将抛出{ {1}}(s)因为OSError为您提供了一个"名称列表"在给定目录中作为相对名称。

示例:

os.listdir()

然后,您可以将结果传递给get_latest_file("images") 来电:

check_output()

更新可以然后通过编写另一个名为latest_image = get_latest_file("images") check_call(["sudo", "convert", latest_image, "-posterize", "2", "imgOut.jpg"]) 的函数来完成此操作:

convert_image()

更新#2:就传递from os.path impomrt splitext from subprocess import check_call def convert_image(inf): base, ext = splitext(inf) outf = "{0:s}-converted{1:s}".format(base, ext) check_call(["sudo", "convert", inf, "-posterize", "2", outf]) 的路径而言,您可能有三种选择:

get_latest_file()

旁注:您的Shebang不太正确;它应该是:IMAGE_PATH = "/path/to/images" # hard coded image_path = raw_input("Enter path to image: ") # prompt user image_path = sys.argv[1] # from the command line

参考文献: