我有一个生成Windows命令的小Python脚本:
def quoted(s):
return '"' + s + '"'
import os
path = 'C:\\Program Files\\SumatraPDF\\SumatraPDF.exe'
params = ' -page 5 '
arg = 'D:\\Dropbox\\Final Term\\Final Draft.pdf'
cmd = quoted(path) + params + quoted(arg)
print cmd
os.system(cmd)
这不会在Sublime文本2中运行(按Ctrl+B):
^{pr2}$但是如果我手动复制并粘贴命令(由这个脚本输出)到cmd.exe
,则会运行。在
我该怎么做?在
这是文件路径中的空间问题(在Windows上是个问题)。操作系统()打开命令shell,此行为是从命令shell继承的。如果您打开“DOS box”并键入 同样的事情,你也会得到同样的结果——Windows命令shell需要用内嵌空格来引用路径。你应该用另一对引号。在
正如其他人所建议的,
subprocess
模块可能是最好的解决方案。在然而,值得注意的是,微软视窗仍然提供旧的8.3文件名翻译,以与旧的MS-DOS程序兼容。您可以通过在
cmd.exe
中运行dir /X
来找到翻译,这通常表明C:\Program Files
可以被称为C:\Progra~1
。在在你的情况下,以下。。。在
……应该有用。在
见this answer, 崇高部分是辅助的,但是从python解释器,您可以测试它操作系统如果在整个字符串中使用双引号,则可以使用。但是,如果使用Popen,则不需要任何引号(它足够聪明,可以理解这一点)。在
例如
或者
^{pr2}$顺便说一下,从您的注释来看,不要用双引号括起路径,用双引号括起整个命令
""path to exe with spaces" "arg1" "arg2" "arg3""
,而且您确实不需要所有的内部引号,但它们不会造成伤害,这意味着它应该与""path to exe with spaces arg1 arg2 arg3""
一起工作相关问题 更多 >
编程相关推荐