我正在尝试使用以下行将目录从便携式驱动器复制到主磁盘:
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
关于我可以在这里改变什么的任何建议?
答案 0 :(得分:2)
您以错误的方式使用check_output
。
check_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"])
(注意 raw 前缀,以避免python解释反斜杠并传递参数列表,这样如果路径中有空格,则引用会自动处理)
在一般情况下,运行subprocess.check_output
的方式是正确的,但在这个简单的情况下,你最好用
import shutil
shutil.copytree(r"c:\Download\Python_Libraries",r"E:\Libraries\Installed")
(不需要运行命令来复制文件/目录,python附带电池,因为他们说:如果你在那里得到错误,它会更容易理解)