المتقدم بيثون FTP - يمكنني التحكم في كيفية ftplib المحادثات الى الخادم؟

StackOverflow https://stackoverflow.com/questions/210067

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا في حاجة الى ارسال سلسلة محددة جدا (غير قياسي) إلى خادم FTP:

dir "SYS:\IC.ICAMA."

وهذه القضية هي الحاسمة، وكذلك أسلوب ونقلت ومضمونها.

ومما يؤسف له، ftplib.dir () ويبدو ان استخدام الأمر "LIST" بدلا من "دير" (ويستخدم حالة خاطئة لهذا التطبيق).

وخادم FTP هو في الواقع مفتاح الهاتف وانها تنفيذ جدا غير قياسي.

وحاولت استخدام ftplib.sendcmd ()، ولكن يرسل أيضا "PASV" كجزء من تسلسل الأوامر.

هل هناك طريقة سهلة لإصدار أوامر معينة إلى ملقم FTP؟

هل كانت مفيدة؟

المحلول

جرب ما يلي. بل هو تعديل الأمر FTP.dir الأصلي الذي يستخدم "دير" بدلا من "LIST". أنه يعطي خطأ "DIR غير مفهومة" مع خادم بروتوكول نقل الملفات اختبرت ذلك، ولكن ذلك لا ترسل الأمر كنت بعد. (سوف تحتاج إلى إزالة الأمر طباعة I استخدامها للتحقق من ذلك.)

import ftplib

class FTP(ftplib.FTP):

    def shim_dir(self, *args):
        '''List a directory in long form.
        By default list current directory to stdout.
        Optional last argument is callback function; all
        non-empty arguments before it are concatenated to the
        LIST command.  (This *should* only be used for a pathname.)'''
        cmd = 'dir'
        func = None
        if args[-1:] and type(args[-1]) != type(''):
            args, func = args[:-1], args[-1]
        for arg in args:
            if arg:
                cmd = cmd + (' ' + arg)
        print cmd
        self.retrlines(cmd, func)

if __name__ == '__main__':
    f = FTP('ftp.ncbi.nih.gov')
    f.login()
    f.shim_dir('"blast"')
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top