为什么在著名的备份 python 脚本中,当目标文件夹名称包含空格时它不起作用?

why in the famous backup python script, it doesn't work when target folder name contains spaces?

大家好:这是著名的文件备份代码。它工作正常给我消息(成功备份)。目标目录已创建,但它是空的。 但是当我从目标文件夹名称中删除空格时,它工作得很好。那么,问题是什么以及如何使用带空格的目标文件夹?

enter code here

import os
import time

source = [r'D:\python35']

target_dir = r"D:\Backup to harddisk 2016"

target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'

if not os.path.exists(target_dir):
    os.mkdir(target_dir)

zip_command = "zip -r {0} {1}".format(target, ' '.join(source))
print('zip command is:')
print(zip_command)
print('Running:')
if os.system(zip_command) == 0:
    print('Successful backup to', target)
else:
    print('Backup FAILED')

好像是用命令行:"zip -r {0} {1}".format(target, ' '.join(source).

空格用于分隔命令行中的参数。如果名称中有 space,它认为这是另一个参数的开始。

问题是 Windows 不知道那些空格是文件名的一部分。使用 subprocess.call,它接受一个参数列表。在 Windows 上,它会在调用 CreateProcess.

之前为您转义空格
import subprocess as subp
zip_command = ["zip", "-r", target] + source
if subp.call(zip_command) == 0:
    print('Successful backup to', target)