Python文件夹复制问题

时间:2017-09-11 20:03:56

标签: python python-2.7 cmd

我正在尝试使用以下行将目录从便携式驱动器复制到主磁盘:

temp_command = "xcopy " + new_dir + " " + basedir + "/Libraries/Installed" #This isn't working. Raises error.
    if subprocess.check_output(temp_command) == True: # copy file to local directory on C:

我收到了这个错误:

Invalid number of parameters
Traceback (most recent call last):
  File "E:/Jason Core/Boot.py", line 103, in <module>
    control()
  File "E:/Jason Core/Boot.py", line 96, in control
    install_libs()
  File "E:/Jason Core/Boot.py", line 45, in install_libs
    if subprocess.check_output(temp_command) == True: # copy file to local directory on C:
  File "C:\Python27\lib\subprocess.py", line 574, in check_output
    raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command 'xcopy c:/Downloads/Python_Libraries E:/Libraries/Installed' returned non-zero exit status 4

关于我可以在这里改变什么的任何建议?

1 个答案:

答案 0 :(得分:2)

您以错误的方式使用check_output

check_output返回命令的输出,而不是TrueFalse,但仅当命令成功时才会返回,但这不是这种情况。

现在为什么不成功?

原因是多方面的,但最明显的原因是

xcopy c:/Downloads/Python_Libraries E:/Libraries/Installed
即使输入存在,

也无法正常工作可以写入输出,因为你将带有斜杠的名称传递给xcopy,这是一个旧的类似MS-DOS的命令,它将其解释为开关。

正确的命令应该是:

subprocess.check_output([r"xcopy",r"c:\Download\Python_Libraries",r"E:\Libraries\Installed"])

(注意 raw 前缀,以避免python解释反斜杠并传递参数列表,这样如果路径中有空格,则引用会自动处理)

在一般情况下,运行subprocess.check_output的方式是正确的,但在这个简单的情况下,你最好用

import shutil
shutil.copytree(r"c:\Download\Python_Libraries",r"E:\Libraries\Installed")

(不需要运行命令来复制文件/目录,python附带电池,因为他们说:如果你在那里得到错误,它会更容易理解)