1

我正在运行一个带有多个参数的 exe,这些参数可能包含也可能不包含空格。我用引号将它们括起来,但它们以某种方式没有正确传递给 exe。

这是我正在使用的命令:

makeblastdb -in "D:\d b\sequence.fasta" -input_type fasta -dbtype prot -title xd -out "D:\d b\xd"

我认为 cmd 应该将 10 个参数传递给 exe,但不知何故它没有正确传递。

这是我得到的结果

BLAST options error: File "D:\d" does not exist.

这基本上是说第二个论点由于某种原因被砍掉了?

任何帮助将不胜感激,谢谢!

4

3 回答 3

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 时遇到类似的问题。也许这会有所帮助:如何从 python 执行程序?os.system 由于路径中的空格而失败

于 2013-02-28T10:50:58.733 回答
2

makeblastdb 有一个奇怪的转义约定。试试这个:

-in \""D:\d b\sequence.fasta"\"

不幸的是,这对 -out 不起作用,所以 dbenham 的答案可能是最好的。

于 2014-06-25T19:21:41.460 回答
0

另一种方法是您可以尝试使用“ D:\d b”的目录短名称,您可以通过dir /X在 D 驱动器上运行命令来找到它。例如,如果我在我的 C 驱动器上运行 dir /X 这是我得到的:

01/21/2013    09:47 AM    <DIR>      PROGRA~1     Program Files

所以你想用C:\Program Files你也可以用C:\PROGRA~1.

于 2013-02-28T01:56:00.320 回答