الملتوية FTPFileListProtocol و أسماء الملفات مع المساحات

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

  •  08-07-2019
  •  | 
  •  

سؤال

أنا باستخدام بيثون ، الملتوية إطار الاتصال إلى موقع FTP لأداء مختلف المهام الآلي.لدينا FTP server يحدث أن تكون نقية فتب ، إذا كان هذا هو ذات الصلة.

عند الاتصال و الاتصال قائمة الطريقة على FTPClient, الناتج FTPFileListProtocol's الملفات مجموعة لا تحتوي على أي أدلة أو أسماء الملفات التي تحتوي على مساحة (' ').

هل رأى أي شخص آخر ؟ هو الحل الوحيد لخلق فئة فرعية من FTPFileListProtocol و تجاوز لها unknownLine طريقة تحليل الملف/الدليل أسماء يدويا ؟

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

المحلول

أولا, إذا كنت أداء المهام الآلي على retrieived FTP القائمة ثم ربما يجب عليك أن تبحث في NLST بدلا من LIST كما لوحظ في RFC 959 القسم 4.1.3:

 NAME LIST (NLST)
 ...
            This command is intended to return information that
            can be used by a program to further process the
            files automatically.

على الملتوية الوثائق بالنسبة LIST يقول:

It can cope with most common file listing formats.

هذا يجعلني المشبوهة;أنا لا أحب الحلول أن "التعامل". LIST كانت معدة للاستهلاك البشري ليس آلة المعالجة.

إذا الهدف الخاص بك الملقم لهم ثم ينبغي أن تفضل MLST و MLSD على النحو المحدد في RFC 3659 القسم 7:

7.  Listings for Machine Processing (MLST and MLSD)

   The MLST and MLSD commands are intended to standardize the file and
   directory information returned by the server-FTP process.  These
   commands differ from the LIST command in that the format of the
   replies is strictly defined although extensible.

ومع ذلك ، فإن هذه أحدث الأوامر قد لا تكون متوفرة على الملقم الهدف وأنا لا أرى لهم في الملتوية.لذلك NLST هو على الأرجح أفضل رهان.

كما أن لب المشكلة ، هناك ثلاثة أسباب محتملة:

  1. معالجة النتائج التي تم إرجاعها غير صحيحة (الملتوية قد يكون على خطأ ، كما توحي لك ، أو ربما في مكان آخر)
  2. الخادم هو عربات التي تجرها الدواب وليس إرسال الصحيحة (كاملة) رد
  3. الأمر خطأ يتم إرسال (من غير المحتمل مع مستقيم NLST/LIST, لكن بعض خوادم تتفاعل بشكل مختلف إذا الحجج المقدمة إلى هذه الأوامر)

يمكنك القضاء على (2) و (3) إثبات أن السبب هو (1) من خلال النظر في ما يتم إرسالها عبر الأسلاك.إذا كان هذا الخيار غير متاح لك كجزء من الملتوية API أو نقية فتب ملقم تسجيل الدخول التكوين ، ثم قد تحتاج إلى الخروج متشمم شبكة اتصال مثل تشبدومب ، سنوب أو يريشارك (على افتراض مسموح لك أن تفعل هذا في البيئة الخاصة بك).ملاحظة أنك سوف تحتاج إلى تتبع ليس فقط التحكم في الاتصال (المنفذ 21) ولكن أيضا اتصال البيانات (منذ أن يحمل نتائج LIST/NLST الأوامر).يريشارك هو لطيف لأنه سيتم تنفيذ البروتوكول على المستوى التحليل بالنسبة لك.

حظا سعيدا.

نصائح أخرى

هذا على نحو ما هو متوقع.FTPFileListProtocol ليس قادرا على فهم كل FTP الإخراج ، لأن بعض أحمق.كما هو موضح في docstring:

إذا كنت بحاجة إلى الشر مختلفة عن أحمق خادم بروتوكول نقل الملفات ، يمكنك تجاوز إما ج{fileLinePattern} أو{parseDirectoryLine()}.

في هذه الحالة, قد يكون الخلل:ربما يمكنك تحسين fileLinePattern و يجعل فهم اسم الملف مع المساحات.إذا كنت مرحبا بكم في فتح الخلل في الملتوية تعقب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top