2014-03-04 75 views
3

我試圖從文件夾中讀取文件並運行與.py文件位於同一目錄中的colorDescriptor.exe。其實我想,每次它讀取一個文件來計算colorDescriptor。從python腳本中調用exe

我的代碼是下面的:

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:/ Documents [在0.1s內完成]

+0

你有任何錯誤? – Nilesh

+0

不,只有文件包含文件夾中的所有文件。從終端colorDescriptor的作品就像這裏:http://koen.me/research/colordescriptors/readme –

+0

請你詳細說明你期望的輸出? – Nilesh

回答

2

問題是您沒有使用您在命令中生成的值。您需要使用glob.glob來獲得圖像的列表,(可能是「* .JPG」),在目錄中,然後爲每個文件創建一個新的outfile.text名和命令是這樣的:

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

是的,你是完全正確的,這正是我所知打算這樣做,但我遇到了使用我在colorDescriptor中讀取的文件的問題。 –

2

錯誤消息表明:您的示例代碼在當前目錄中的文件image上運行colorDescriptor。但是,從代碼上下文中,我們可以看到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)) 

我重新安排了參數的順序以獲得更好的可視性 - 我認爲它沒有區別。

+0

我更改了代碼,但是,我收到了同樣的錯誤。 –

+0

我怎樣才能使用這種語法的兩個字符串就像這裏: fileOut = f +「。txt」 pattern =「colorDescriptor%s --detector harrislaplace --descriptor sift --output%s」 os.system(pattern%image fileOut) –

+1

多次使用值的最佳方式是使用新的python替換語法;看到我更新的答案。 – alexis