如何确定哪个版本的Python适合脚本?

2024-05-07 03:39:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我想确定哪个版本的Python最适合Python脚本。有没有一种自动化的方法?你知道吗

我想到的具体问题是确定在脚本中使用哪个版本的Python(称为ea800)_下载程序.downloader)此处显示:

http://d.hatena.ne.jp/yamdan/20110129/1296320457

我之所以问这个问题,是因为当我尝试运行它时会出现许多错误。我试过用Python版本2.6和2.7运行它。错误列表的第一个是:

File "ea800_downloader.py", line 43
    "" "
       ^
SyntaxError: EOL while scanning string literal

在本例中,它似乎是尝试使用多行注释,但某处出现了问题。如果您对此有任何建议,我们将不胜感激。你知道吗

编辑:按照建议,脚本的代码被发布。你知道吗

  # / Usr / bin / env python! 
  # - * - coding: UTF-8 - * -

  # 
  # Ea800_downloader.Py 
  # 
  # Usage: python Ea800_downloader.Py folder_id OUT_DIR 
  #    
  # folder_id: ID of the folder that you want to download (see below) 
  # 
  # | ID | folder path | 
  # | ---- + ------- ----------------------------- | 
  # | 0 | / ETablet / var / ebook | 
  # | two | / ETablet / var / photos | 
  # | 4 | / ETablet / var / Enotes | 
  # | 8 |? | 
  # | 12 | / ETablet / etc / db | 
  # | fourteen | / ETablet / etc / template | 
  # | 31 | / ETablet | 
  # | 32 | / usr / local / ETablet / bin | 
  # | thirty-three | / ETablet / etc | 
  # | 34 | / ETablet / var | 
  # | 35 | / usr / local / ETablet / lib | 
  # | 37 | / usr / local / ETablet / bin / Ebookreader | 
  # 
  # OUT_DIR: the directory where you want to store the folder where you downloaded 
  to make two directories xmlfiles and files directly under the # OUT_DIR directory 
  to store the downloaded file, to # files directory 
  to # xmlfiles directory stores (in the form of XML) list of files.


  Import sys
   Import os
   Import socket
   Import Xml.Etree.ElementTree as etree
   Import hashlib


  BUF_SIZE = 8192


  class  Connection (object):
      "" "
       . Simple wrapper class for Raw TCP Connection 
       Refer to: Http://Docs.Python.Org/howto/sockets.Html 

      Attributes: 
       - _Sock
       "" "

      def  __ init__ (self, address):
          self._sock = socket.socket ()
          self._sock.connect (address)

      def  Send (self, op):
          totalsent = 0
          op = Op.Encode (" UTF-8 ")
          op_size = len (op)
          while Totalsent <Op_size:
              sent = self._sock.send (op)
              if sent == 0:
                   raise RuntimeError, \ 
                      " socket Connection broken "
              totalsent = totalsent + sent

      def  recv (self, size = one):
          read = 0
          buf = []
          while read <size:
              data = self._sock.recv (BUF_SIZE)
              if Data == "":
                   raise RuntimeError, \ 
                      " socket Connection broken "
              read = read + len (data)
              buf.append (data)

          Return "". join (buf)

      def  close (self):
          self._sock.close ()


  class  Downloader (object):
      "" "
       File downloader for Eee Note EA800. 

      Attributes: 
       - _cs 
       - _DS 
       - _Files_folder 
       - _Xmlfiles_folder
       "" "

      def  __ init__ (self, OUT_DIR):
           # Connect to command socket 
          Connection Self._Cs = ((" 169.254.2.1 ", twenty thousand))
           # recieve welcome message
          self._cs.recv ()

          # Connect to Data socket 
          Connection Self._Ds = ((" 169.254.2.1 ", 20 001))
           # recieve welcome message
          self._cs.recv ()

          Self._Files_folder = os.path.join (OUT_DIR, " Files ")
          Self._Xmlfiles_folder = os.path.join (OUT_DIR, " Xmlfiles ")

      def  close (self):
           # close connections both
          self._ds.close ()
          self._cs.close ()

      def  _Md5sum (self, Data):
          m = hashlib.md5 ()
          m.update (data)
          Return M.Hexdigest ()

      def  downloadfile (self, folder_id, path):
          "" " EXECUTE 'downloadfile' command "" "

          # Send "downloadfile" request 
          op = " downloadfile \ n % d \ n Path =% s \ n \ \ n :: \ \ n "% (folder_id, path)
          self._cs.send (op)

          # Receive "downloadfilereturnvalue" response
          res = self._cs.recv ()
          Res.Split Res_list = (b " \ n ")

          assert Res_list [0] == " Downloadfilereturnvalue "," not correct response "

          # Extract status and file_size from "downloadfilereturnvalue" response
          status = res_list [1]
          file_size = int (res_list [2])
          MD5 = Res_list [three] [4:]   # drop first four character "MD5 ="

          assert file_size> 0, " file_size is not positive integer "

          # Prepare file and directory to output data
          outfile_path = os.path.join (self._files_folder,
                                      " % 02d "% folder_id,
                                      Path.Lstrip (" / "))
          outfile_dir = os.path.dirname (outfile_path)
          try :
              os.makedirs (outfile_dir)
          except OSError:
               pass

          # Output data to local directory
          data = self._ds.recv (file_size)
          assert Self._Md5sum (Data) == MD5, " invalid MD5 check sum "
          outfile = Open (Outfile_path, " wb ")
          outfile.write (data)
          outfile.close ()

          Print " Downloaded:% s "% path

      def  listfile (self, folder_id):
          "" " EXECUTE 'listfile' command "" "

          # Send "listfile" request 
          op = " listfile \ n % d \ n \ \ n :: \ \ n "% folder_id
          self._cs.send (op)

          # Receive "listfilereturnvalue" response
          res = self._cs.recv ()
          Res.Split Res_list = (b " \ n ")

          assert Res_list [0] == " Listfilereturnvalue "

          # Extract status and file_size from "listfilereturnvalue" response
          status = res_list [1]
          file_size = res_list [2]
          if File_size.Endswith (" \ \ n :: \ \ n "):
              file_size = file_size [: -6]
          file_size = int (file_size)

          assert file_size> 0

          # Output data to console
          data = self._ds.recv (file_size)
          Print Data

      def  xmlfile (self, folder_id):
          "" " EXECUTE 'xmlfile' command "" "

          # Send "xmlfile" request 
          op = " xmlfile \ n % d \ n \ \ n :: \ \ n "% folder_id
          self._cs.send (op)

          # Receive "xmlfilereturnvalue" response
          res = self._cs.recv ()
          Res.Split Res_list = (b " \ n ")

          assert Res_list [0] == " Xmlfilereturnvalue "

          # Extract status and file_size from "xmlfilereturnvalue" response
          status = res_list [1]
          file_size = res_list [2]
          file_size = int (file_size)

          assert file_size> 0

          # Prepare output to File and Directory Data 
          Outfile_path = os.path.join (Self._Xmlfiles_folder, " % 02D.Xml "% folder_id)
           try :
              os.makedirs (self._xmlfiles_folder)
          except OSError:
               pass

          # Output to local Data Directory 
          outfile = Open (Outfile_path, " wb ")
          data = self._ds.recv (file_size)
          outfile.write (data)
          outfile.close ()

          # Parse xmlfile
          tree = etree.parse (outfile_path)

          Return tree

      def  Downloadfolder (self, folder_id):
          "" " recursive download Files in a folder "" "

          tree = self.xmlfile (folder_id)
          self._traversal_and_download (tree.getroot (), u "", folder_id)

      def  _Traversal_and_download (self, Elm, folder_name, folder_id):
           if Elm.Tag == " File ":
              path = folder_name + u " / "+ Elm.Get (" name ")
               try :
                  self.downloadfile (folder_id, path)
              except AssertionError, e:
                   Print e
           else :
               for child in Elm.Getchildren ():
                  Self._Traversal_and_download (child, Elm.Get (" name ", u" "), folder_id)


  if __ name__ == " __ main__ ":
      folder_id = int (sys.argv [1])
      out_dir = sys.argv [2]

      d = Downloader (out_dir)
      d.downloadfolder (folder_id)
      d.close ()

Tags: topathselfiddatasizedeffolder
2条回答

那段代码似乎有语法错误。"" "在任何Python版本中都不是有效的语法。您需要修复代码或尝试重新下载它。尝试其他版本的Python是没有帮助的。很可能需要删除引号之间的空格。如果复制并粘贴了代码,则可能需要稍微修改一下格式。你知道吗

它看起来要么是复制粘贴错误,要么是编码问题。我访问了原始站点,代码在Python2.7下运行良好。你只需要修正三个双引号之间的空格。你知道吗

为了回答您最初的问题,您可以编写检查语法脚本来读取代码,看看哪些版本的Python可以成功编译代码。如果您可以运行compile(somescript, '', 'exec'),那么在当前版本的Python下is代码就可以了。这是IDLE's checksyntax() function使用的策略。你知道吗

相关问题 更多 >