从python脚本调用exe

时间:2014-03-04 08:39:04

标签: python exe

我正在尝试从文件夹中读取文件并运行与colorDescriptor.exe文件位于同一目录中的.py。实际上我想,每次它读取文件来计算colorDescriptor。

我的代码如下:

import os

from os import listdir
from os.path import isfile, join
mypath1 = "/clothes/"
mypath2 = "/i386-win-vc/"
onlyfiles = [ f for f in listdir(mypath1) if isfile(join(mypath1,f)) ]
image = mypath1+f
os.popen("colorDescriptor image --detector harrislaplace --descriptor sift --output 
onlyfiles.txt ")
print image

从终端,使用colorDescriptor.exe的语法例如是:

colorDescriptor image.jpg --detector harrislaplace --descriptor sift --output onlyfiles.txt

我收到的是一个错误:

Tue04 10:53:30,248 - [Impala.Persistency.FileSystem ] Unable to find image in path 
Tue04 10:53:30,248 - [Impala.Core.Array.ReadFile ] Don't know how to read 
Tue04 10:53:30,248 - [Sandbox.koen.mainColorDescriptor ] [ERROR] Could not read input   
file: is it really a valid image? image

使用建议的代码更改后:

import os

from os import listdir
from os.path import isfile, join
mypath1 = "C:/Documents and Settings/Desktop/clothes/"
mypath2 = "C:/Documents and Settings/My  
Documents/colordescriptors40/i386-win-vc/"
onlyfiles = [ f for f in listdir(mypath1) if isfile(join(mypath1,f)) ]
image = mypath1+f
print  image
pattern = "colorDescriptor %s --detector harrislaplace --descriptor sift --output 
onlyfiles.txt" 
os.system(pattern % image)

我现在收到以下内容:

 Tue04 11:06:45,091 ERROR [Impala.Persistency.FileSystem ] Unable to find C:/Documents 
 in 
 path 
 Tue04 11:06:45,091 INFO  [Impala.Persistency.FileSystem ]     
 Tue04 11:06:45,091 ERROR [Impala.Core.Array.ReadFile ] Don't know how to read 
 Tue04 11:06:45,091 ERROR [Sandbox.koen.mainColorDescriptor ] [ERROR] Could not read input 

文件:它真的是一个有效的图像吗? C:/文件    [以0.1秒完成]

2 个答案:

答案 0 :(得分:2)

问题是您没有使用在命令中生成的值。您需要使用glob.glob获取图像列表(可能是'* .jpg'),目录中的文件,然后为每个文件创建一个新的outfile.text名称和命令,如:

    cmd = "colorDescriptor %s --detector harrislaplace --descriptor sift --output %s.txt " % (imagepath, imagepath)
    os.popen(cmd)

答案 1 :(得分:2)

错误消息表明:您的示例代码在当前目录中的文件colorDescriptor上运行image。但是,从代码上下文中,我们可以看到image是一个包含路径和实际文件名的变量。所以这样做:

pattern = "colorDescriptor %s --detector harrislaplace --descriptor sift --output onlyfiles.txt" 
os.popen(pattern % image)

编辑:要在输出文件名中使用相同的变量,最好的方法是切换到python的新命名语法。下面是一个示例,它将所有输出文件放在运行脚本的目录中,而不是放在与每个文件相同的目录中(我相信如果不是你想要的话,你会看到如何更改它)。

pattern = "colorDescriptor {path}/{file} --output {file}.txt --detector harrislaplace --descriptor sift" 
os.popen( pattern.format(path=mypath1, file=f) )

我重新安排了参数的顺序以提高可见度 - 我认为它没有任何区别。