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