【发布时间】:2013-01-18 17:21:24
【问题描述】:
我正在编写一个需要在 Linux 和 Windows 上运行并使用路径中存在的可执行文件(带参数)的程序。 (假设)
目前我在使用 Subprocess.Call 和 Subprocess.Popen 在 Windows 中运行可执行文件时遇到问题。
对于这样的代码,在 Windows 8 中
def makeBlastDB(inFile, inputType, dbType, title, outDir):
strProg = 'makeblastdb'
strInput = '-in ' + inFile
strInputType = '-input_type ' + inputType
strDBType = '-dbtype ' + dbType
strTitle = '-title ' + title
strOut = '-out ' + os.path.join(os.sep, outDir, title)
cmd = [strProg, strInput, strInputType, strDBType, strTitle, strOut]
result = Popen(cmd, shell=True)
我在控制台中收到错误消息
'makeblastdb' is not recognized as an internal or external command,
operable program or batch file.
即使我可以使用 cmd.exe 运行相同的命令 我使用 shell=False 得到相同的响应。
假设可执行文件位于 PATH 环境变量中,关于如何运行命令的任何想法?谢谢
【问题讨论】:
-
只需编写一个简单的脚本将可执行文件添加到您的路径中,或者您可以提供可执行文件的完整路径。
-
我真的不想走那条路,因为可执行文件是第三方的,这意味着它可以安装在任何地方。
-
它可以在 shell 中工作吗?你比较过
echo %PATH%和os.environ['PATH']吗? -
@JFSebastian 这个问题已经超过 3 年了,OP 已经以某种方式解决了他们的问题(答案很可疑),我不确定你会从这里获得更多信息...... ;) 它可能是不同的 cwd 或一些糟糕的 windows 怪异,因为接受的答案没有多大意义。
-
@wim:如果 OP 不会更新问题,那么它应该被关闭为不可重现(因为显然
subprocess.Popen可以运行(至少一些)在 Linux 和 Windows 上的 PATH 中的可执行文件)。
标签: python windows shell subprocess