簡體   English   中英

從python腳本調用exe

[英]Call exe from python script

我試圖從文件夾中讀取文件並運行與.py文件位於同一目錄中的colorDescriptor.exe 實際上,我想每次讀取文件來計算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秒完成]

問題是您沒有使用在命令中生成的值。 您需要使用glob.glob來獲取目錄中圖像的列表(可能是* .jpg),然后為每個文件創建一個新的outfile.text名稱並執行以下命令:

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

該錯誤消息使之很清楚:您的示例代碼在當前目錄中的文件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) )

我重新排列了參數的順序以提高可見性-我認為這沒有什么區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM