Python文件夹复制问题

Python文件夹复制问题,python,python-2.7,cmd,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 nu

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

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
参数数量无效
回溯(最近一次呼叫最后一次):
文件“E:/Jason Core/Boot.py”,第103行,在
控制()
文件“E:/Jason Core/Boot.py”,第96行,处于控制状态
安装_libs()
文件“E:/Jason Core/Boot.py”,第45行,在安装库中
如果子进程check_输出(temp_命令)=True:#将文件复制到C上的本地目录:
文件“C:\Python27\lib\subprocess.py”,第574行,在check\u输出中
引发被调用的进程错误(retcode,cmd,output=output)
subprocess.calledProcess错误:命令“xcopy c:/Downloads/Python_Libraries E:/Libraries/Installed”返回非零退出状态4

关于我可以在这里更改什么有什么建议吗?

您使用的是错误的
检查输出

check\u output
返回命令的输出,而不是
True
False
,但仅当命令成功时返回,此处不是这种情况

现在为什么它没有成功

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

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"])
(注意原始前缀,以避免python解释反斜杠并传递参数列表,因此如果路径中有空格,将自动处理引号)

在一般情况下,这种运行
子流程的方法是正确的,但在这种简单的情况下,最好使用

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

(不需要运行命令来复制文件/dir,python自带电池,正如他们所说:如果你在那里遇到错误,它会更容易理解)

你使用的是错误的
检查输出

check\u output
返回命令的输出,而不是
True
False
,但仅当命令成功时返回,此处不是这种情况

现在为什么它没有成功

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

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"])
(注意原始前缀,以避免python解释反斜杠并传递参数列表,因此如果路径中有空格,将自动处理引号)

在一般情况下,这种运行
子流程的方法是正确的,但在这种简单的情况下,最好使用

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

(无需运行命令来复制文件/dir,python自带电池,正如他们所说:如果在那里出现错误,将更容易理解)

子流程。检查输出(temp\u命令)==True
这样不起作用:
check_output
仅当程序以0返回代码完成时才返回输出。您不想为此使用Python shutil库有什么原因吗?错误来自xcopy而非Python,返回代码为4“发生初始化错误。内存或磁盘空间不足,或者您输入了无效的驱动器名或命令行上的无效语法“@theory”命令行上的无效语法,因为路径为slashes@Mike我不知道shutil
子进程。检查输出(temp\u命令)==True
这样不起作用:
check_output
仅当程序以0返回代码完成时才返回输出。是否有原因不想为此使用Python shutil库?错误来自xcopy而不是Python,返回代码4是“发生初始化错误”。内存或磁盘空间不足,或者您输入了无效的驱动器名或命令行上的无效语法“@theory”命令行上的无效语法,因为路径为slashes@Mike我不知道SHUTIL,如果我还想使用temp变量呢?在这台机器上,我想从中复制的驱动器标有“E:,但如果我把它放在另一台机器上,它就会变成“D:”或“F”:这取决于我有多少个驱动器。此外,该命令不起作用,我发现windows找不到c:\download。我看不到与python脚本的关系。如果您不知道路径,只需使用
os.path.isdir()
测试路径即可。要获取temp变量:
os.getenv(“temp”)
。也许还有另一个问题?我发现-c:\download是我想复制到的地方,它必须是
shutil.copytree()
@tobytoyo中的第二个,如果是这样的话,那么xcopy.exe的下载也是反向的。您是否在命令行中检查了
xcopy/?
?是的
xcopy
不是
memcpy
。这是来源,然后是目的地。但这并不会改变我答案的有效性。如果我仍然想使用临时变量呢?在这台机器上,我要从中复制的驱动器标有“E:”,但如果我把它放在另一台机器上,它会变成“D:”或“F”:这取决于我有多少个驱动器。此外,该命令不起作用,我发现windows找不到c:\download。我看不到与python脚本的关系。如果您不知道路径,只需使用
os.path.isdir()
测试路径即可。要获取temp变量:
os.getenv(“temp”)
。也许还有另一个问题?我发现-c:\download是我想复制到的地方,它必须是
shutil.copytree()
@tobytoyo中的第二个,如果是这样的话,那么xcopy.exe的下载也是反向的。您是否在命令行中检查了
xcopy/?
?是的
xcopy
不是
memcpy
。这是来源,然后是目的地。不过,这并没有改变我答案的正确性。