从python脚本调用exe

从python脚本调用exe,python,exe,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)

我正在尝试从文件夹中读取文件并运行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
 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 
从终端来看,使用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)
我现在收到以下文件:

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
 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.1s内完成]

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

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

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

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

错误消息表明:示例代码在当前目录中的文件映像上运行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) )

为了更好的可见性,我重新排列了参数的顺序-我认为这没有什么区别。

错误消息清楚地表明:您的示例代码在当前目录中的文件图像上运行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) )


我重新排列了参数的顺序以提高可见性-我认为这没有什么区别。

您有没有收到任何错误?没有,只有文件包含文件夹中的所有文件。从终端来看,colorDescriptor的工作原理如下:请详细说明您期望的输出是什么?好的,更清楚地说,似乎os.popen不起作用。它没有任何作用。我希望创建一个txt文件onlyfiles.txt,其中包含image.jpg的颜色描述,就像我运行批处理文件时一样。您需要帮助解决什么问题?如果希望在控制台上看到colorDescriptor的输出,或者希望python在变量中接收它,请参阅popen文档;或者更好的方法是使用子流程模块。是否有任何错误?否,仅文件包含文件夹中的所有文件。从终端来看,colorDescriptor的工作原理如下:请详细说明您期望的输出是什么?好的,更清楚地说,似乎os.popen不起作用。它没有任何作用。我希望创建一个txt文件onlyfiles.txt,其中包含image.jpg的颜色描述,就像我运行批处理文件时一样。您需要帮助解决什么问题?如果希望在控制台上看到colorDescriptor的输出,或者希望python在变量中接收它,请参阅popen文档;或者更好,使用子流程模块。是的,你完全正确,这正是我打算做的,但我在使用colorDescriptor中读取的文件时遇到问题。是的,你完全正确,这正是我打算做的,但我在使用colorDescriptor中读取的文件时遇到问题。但是,我更改了代码,我收到了相同的错误。如何将此语法用于以下两个字符串:fileOut=f+.txt pattern=colorDescriptor%s-detector harrisplace-descriptor sift-output%s os.systempattern%image fileOut多次使用值的最佳方法是使用新的python替换语法;查看我的更新答案。但是,我更改了代码,我收到了相同的错误。如何将此语法用于以下两个字符串:fileOut=f+.txt pattern=colorDescriptor%s-detector harrisplace-descriptor sift-output%s os.systempattern%image fileOut多次使用值的最佳方法是使用新的python替换语法;请参阅我的最新答案。