المتقدم بيثون FTP - يمكنني التحكم في كيفية ftplib المحادثات الى الخادم؟
سؤال
وأنا في حاجة الى ارسال سلسلة محددة جدا (غير قياسي) إلى خادم 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"')
لا تنتمي إلى StackOverflow