我正在运行一个带有多个参数的exe,这些参数可能包含也可能不包含空格。我用引号括起来但是它们不知何故没有正确地传递给exe。
这是我正在使用的命令:
makeblastdb -in "D:\d b\sequence.fasta" -input_type fasta -dbtype prot -title xd -out "D:\d b\xd"
我认为cmd应该向exe传递10个参数,但不知何故它没有正确传递。
这是我得到的结果
BLAST options error: File "D:\d" does not exist.
基本上是说第二个论点因某种原因被切断了?
任何帮助将不胜感激,谢谢!
答案 0 :(得分:3)
根据您对问题的评论,BLAST实用程序无法正确处理带空格的引用路径,并且您的卷不支持短文件名。
显然,您可以将工作目录移动到不包含空格的路径。
另一种方法是使用SUBST临时创建指向有问题路径的虚拟驱动器。
subst K: "d:\d b"
makeblastdb -in "K:\sequence.fasta" -input_type fasta -dbtype prot -title xd -out "K:\xd"
subst /d K:
输入subst /?
以获取有关该命令的帮助。
根据您在python中运行命令的事实进行更新
在您对此答案的评论中,您声明您将尝试从python中获取命令。这可能是你问题的全部来源。
您应该尝试直接从Windows命令提示符(cmd.exe控制台)运行问题中的命令。
如果命令在命令提示符下不起作用,那么BLAST实用程序确实存在问题,SUBST是一个很好的解决方案。
如果命令在命令提示符下工作,则问题在于如何从python中弹出命令,并且不需要SUBST命令。
我不是python用户,但我发现许多人在Windows上使用python时遇到类似的问题。也许这会有所帮助:How do I execute a program from python? os.system fails due to spaces in path
答案 1 :(得分:2)
makeblastdb有一个奇怪的转义约定。试试这个:
-in \""D:\d b\sequence.fasta"\"
不幸的是,这对-out不起作用,所以dbenham的答案可能是最好的。
答案 2 :(得分:0)
替代方法是您可以尝试使用目录短名称“D:\d b
”,您可以通过在D驱动器上运行dir /X
命令找到它。例如,如果我在我的C盘上运行dir / X,这就是我得到的:
01/21/2013 09:47 AM <DIR> PROGRA~1 Program Files
因此,您希望使用C:\Program Files
,也可以使用C:\PROGRA~1
。