python调用带空格的windows cmd命令问题

最近需要用到python脚本一次跑多个FDTD仿真,遇到了很奇葩的command line输入字符串引号截取的问题。最后在Stack Overflow上面找到了解答。

简单命令中的路径带空格的问题

例如想运行程序“C:/Program Files/Lumerical/FDTD/bin/fdtd-solutions.exe”,路径中有空格,那么把整个路径用双引号引起来就可以:

import os
FDTDProgramPath = 'C:/Program Files/Lumerical/FDTD/bin/fdtd-solutions.exe'

commandText = '"' + FDTDProgramPath + '"'
os.system(commandText )

复杂命令中的路径带空格的问题

但如果想给以上命令添加运行参数,例如要指定运行的仿真文件“E:/FDTD Projects/Check/Check.fsp”和指定的仿真脚本“E:/FDTD Projects/Check/Check.lsf”,如果只是把几个命令串接成一个字符串,以下代码会报错:

import os
FDTDProgramPath = 'C:/Program Files/Lumerical/FDTD/bin/fdtd-solutions.exe'
FDTDProjectPath = 'E:/FDTD Projects/Check/'

commandText = '"' + FDTDProgramPath + '" "' + FDTDProjectPath + 'Check.fsp' + '" -run "' + FDTDProjectPath + 'Check.lsf' + '"'
os.system(commandText )

‘C:/Program’ is not recognized as an internal or external command, operable program or batch file.

如果把字符串里的字符复制出来,粘贴到cmd命令行中又能完美运行。这个错误困扰了我好久,甚至一度都只能使用上面那个简单命令打开FDTD然后手动打开要运行的仿真文件。今天由于要做更复杂的仿真,这个问题必须要解决,就各种试错:把空格、斜杠换成转义字符,编码方式改为utf-8,把命令拆解成多行然后用&连接起来等等都没能解决。网上找了半天,找到一个遇到相同问题的博客python处理Windows平台上路径有空格,但也只是曲线救国,没能解决我的问题。最后终于在Stack Overflow上找到了这个问题的解答:

Not able to parse windows path with space in python

大意是说,python会把command_text中的字符串命令传递给Command Prompt,由Command Prompt来决定是否保留字符串前后的双引号。判断标准可以通过运行cmd.exe /?来查看。而上面的代码中的单个双引号不符合保留标准,所以在运行之前被去掉了。

解决方法也很简单,把上面的command_text再用一对双引号包括起来就可以了:

import os
FDTDProgramPath = 'C:/Program Files/Lumerical/FDTD/bin/fdtd-solutions.exe'
FDTDProjectPath = 'E:/FDTD Projects/Check/'

commandText = '"' + FDTDProgramPath + '" "' + FDTDProjectPath + 'Check.fsp' + '" -run "' + FDTDProjectPath + 'Check.lsf' + '"'
wrappedCommandText = '"' + commandText + '"'
os.system(wrappedCommandText )

# 或者这样
commandText = '""' + FDTDProgramPath + '" "' + FDTDProjectPath + 'Check.fsp' + '" -run "' + FDTDProjectPath + 'Check.lsf' + '""'
os.system(commandText )
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值