2013-10-05 3 views
1

Я пытаюсь скопировать файлы * .patch из папки ядра и работает на следующие ошибкиWindowsError: [Ошибка 123] Неверное имя файла, имени каталога или тома: '\\ buildloc \ kernel \ *. Patch /*.*'

Traceback (most recent call last): 
    File "copytest.py", line 47, in <module> 
    main() 
    File "copytest.py", line 44, in main 
    copystuff(src,dest) 
    File "copytest.py", line 18, in copystuff 
    shutil.copytree(src, dest) 
    File "C:\CRMApps\apps\Python262\lib\shutil.py", line 140, in copytree 
    names = os.listdir(src) 
WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect: '\\\\buildloc\\kernel\\*.patch/*.*' 

КОД: -

import argparse 
import shutil, errno 
import os 
def copystuff(src, dest): 
    #print "IN COPY STUFF" 
    if os.path.isfile(src): 
     dest_dirname = os.path.dirname(dest) 
     #print "DEST DIR NAME" + dest_dirname 
     if not os.path.isdir(dest_dirname): 
      # print "MAKING DEST DIR" 
      os.makedirs(dest_dirname) 
     print src 
     print dest 
     shutil.copy2(src, dest) 
    else: 
     print src 
     print dest 
     shutil.copytree(src, dest) 

def main(): 
    copy_list=[r'\kernel\*.patch'] 
    #copy_list=['out\target\product\msm8226\obj\KERNEL_OBJ\vmlinux'] 
    parser = argparse.ArgumentParser(description='This is copy binaries for android build script) 
    parser.add_argument('-v','--build_version',action='store',dest='build_version',help='<Required> Build version',required=True) 
    parser.add_argument('-s','--source',action='store',dest='source',help='<Required> source path',required=True) 
    parser.add_argument('-d','-destination',action='store',dest='destination',help='<Required>destination path',required=True) 
    results = parser.parse_args()# collect cmd line args 
    build_version = results.build_version 
    print "BUILD_VERSION: " + build_version 
    source = results.source 
    print "SOURCE PATH: " + source 
    destination = results.destination 
    print "DESTINATION PATH: " + destination 
    dest_fastboot= destination + r'\out\target\product\msm8226' 
    if not os.path.isdir(dest_fastboot): 
     # print "MAKING DEST DIR" 
     os.makedirs(dest_fastboot) 
     shutil.copy2('Fastboot_load.bat', dest_fastboot) 
    for item in copy_list: 
     item = item.strip() 
     print "ITEM: " + item 
     src = source + item 
     dest = destination + item 
     copystuff(src,dest) 

if __name__ == '__main__': 
    main() 
+0

Является ли ваш текущий рабочий каталог UNC-путём? Это может сбить с толку множество инструментов; без чтения или тестирования вашего источника, если это проблема ... можете ли вы установить его на букву диска вместо решения проблемы? – abarnert

ответ

4

Ваша задача проста: \\buildloc\kernel\*.patch/*.* не имя каталога. Имена файлов Windows не могут содержать звездочки, среди других запрещенных символов. shutil.copytree() требует имя каталога; он не делает глотания.

Если ваша цель состоит, чтобы скопировать все файлы из каталогов, чьи имена заканчиваются .patch, один подход заключается в использовании что-то вроде glob.glob, чтобы определить каталоги, которые вы хотите, а затем shutil.copytree() скопировать каждый из этих каталогов. Другая идея - предоставить функцию обратного вызова с copytree, чтобы отфильтровать каталоги, которые вы не хотите.

Смежные вопросы