subprocess.run "No closing quotation" 的格式化字符串

Formatting String for subprocess.run "No closing quotation"

我有这个命令 运行:

'xcopy /e "%s" "%s"'%(executablesPath + "\*", sourcePath+"\Executables\")

格式为:

xcopy /e "I:\Storage$\tools\Executables\*" "C:\Win10x64-1903\Executables\"

和运行内:

subprocess.run(shlex.split(command))

导致错误的原因 ValueError: No closing quotation

shlex.split 不喜欢双引号前的最后一个反斜杠。您似乎想转义此引号,因此出现了消息。

快速修复:将 sourcePath+"\Executables\" 替换为 os.path.join(sourcePath,"Executables")

更好的解决方法:不要编写命令行只是为了再次拆分它。只需使用参数列表

subprocess.run(["xcopy","/e",os.path.join(executablesPath,"*"),os.path.join(sourcePath,"Executables")])

更好的是,使用 shutil.copytree 递归复制目录。不需要不可移植的外部命令。一些东西(未经测试)像:

import shutil
shutil.copytree(executablesPath,os.path.join(sourcePath,"Executables"))