【发布时间】:2023-02-23 09:49:00
【问题描述】:
这个最小的例子:(在 PyCharm 调试器中运行)
import os
from os.path import join
import subprocess
src_path = r'C:/TEMP/source'
dest_path = r'C:/TEMP/dest'
if __name__ == "__main__":
for root, _, files in os.walk(src_path):
for name in files:
src_file_path = join(root, name)
rel_dest_file_path = os.path.join(dest_path, os.path.dirname(os.path.relpath(src_file_path, src_path)))
rdfp = join(rel_dest_file_path, name)
sfp = src_file_path
cmd = "['copy', '/v', %s, %s]" % (sfp, rdfp)
print 'calling shell subprocess %s' % cmd
subprocess.call(['copy', '/v', sfp, rdfp], shell=True)
产生这个输出:
calling shell subprocess ['copy', '/v', C:/TEMP/source\foo bar.txt, C:/TEMP/dest\foo bar.txt]
1 file(s) copied.
calling shell subprocess ['copy', '/v', C:/TEMP/source\foo.txt, C:/TEMP/dest\foo.txt]
The syntax of the command is incorrect.
Process finished with exit code 0
为什么名为“foo bar.txt”的文件的路径不会产生命令语法错误?为什么路径反而导致成功的文件复制?
我可以通过在初始原始字符串文字路径分配中显式使用 Windows 路径分隔符来修复示例中的语法问题,这对我来说很有意义。
src_path = r'C:\TEMP\source'
dest_path = r'C:\TEMP\dest'
没有意义的是为什么“混合斜杠”路径中的空格也“解决”了语法问题。
任何参考或指针?
【问题讨论】:
-
您使用 2.x 是否有特殊原因,它已超过其生命周期终止日期 3 年以上?无论如何,这似乎真的是一个关于 Windows 本身的问题,而不是关于编写 Python 代码的问题。
标签: python windows shell path-separator