سؤال

بلدي برنامج بيثون يمكن إطلاقها مع مجموعة من الخيارات المختلفة (أو subcommands) مثل:

$ myProgram doSomething
$ myProgram doSomethingElse
$ myProgram nowDoSomethingDifferent

أريد أن استخدام الإكمال التلقائي مع بحيث إذا قمت بكتابة "myProgram د" يعود "myProgram doSomething" و إذا كنت من النوع "myProgram ن" يجعل "myProgram nowDoSomethingDifferent".هذا هو مماثل متوسط استخدام وحدة rlcompleter, ولكن لا اختيار ممكن خيارات الانتهاء من الملفات (أو من التاريخ) ولكن من مجموعة مخصصة من سلاسل (التي تتوافق مع خيارات البرنامج)

أي فكرة عن كيفية تنفيذ ذلك ؟

أنا على علم متغير PYTHONSTARTUP (التي يجب أن يشير إلى ملف لا أعرف كيفية كتابة).

كما تعمل سبيل المثال ، جانغو-الادارة (من جانغو حزمة) لديه نفس الميزة أنا أبحث عن

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

المحلول

وإنشاء ملف "myprog-completion.bash" ومصدر في ملف .bashrc الخاص بك. شيء من هذا القبيل للحصول على انك بدأته ...

_myProgram()
{
  cur=${COMP_WORDS[COMP_CWORD]}
  case "${cur}" in
    d*) use="doSomething" ;;
    n*) use="nowDoSomethingElse" ;;
  esac
  COMPREPLY=( $( compgen -W "$use" -- $cur ) )
}
complete -o default -o nospace -F _myProgram  myProgram

نصائح أخرى

هناك وحدة optcomplete والذي يسمح لك لكتابة إنجاز باش تكملة في برنامج بيثون.هذا مفيد جدا في تركيبة مع optparse.يمكنك فقط تحديد الحجج الخاصة بك مرة واحدة, أضف التالي إلى الخاص بك .bashrc

complete -F _optcomplete <program>

و من جميع الخيارات الخاصة بك سوف تكون autocompleted.

وكما ذكر في إجابات أخرى، في باش يمكن القيام بذلك مع complete-باش مدمج. أسهل من كتابة وظيفة (كما هو الحال في richq في الإجابة ) تستخدم complete الخيار -W والتي تمكنك من تحديد قائمة من الكلمات. في المثال الخاص بك هذا من شأنه أن يكون:

complete -W "doSomething doSomethingElse nowDoSomethingDifferent" myProgram

وكما هو أونيلينير لم يكن لديك لإنشاء ملف لهذا، ولكن يمكنك مجرد وضعها في .bashrc الخاص بك.

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

إذا كنت تستخدم باش يمكنك أن تبحث في / الخ / bash_completion، وعلى الأقل على ديبيان / أوبونتو يجب إنشاء ملف في /etc/bash_completion.d/ يحدد الاكمال للبرنامج.

وكذلك ما أعرف، PYTHONSTARTUP هو لأوامر ليتم تنفيذها عندما يبدأ المترجم يصل <لأ href = "http://www.python.org/doc/1.5.2p2/tut/node4.html" يختلط = "نوفولو noreferrer"> [1] . rlcompleter هو لتكملة <م> داخل السيناريو الخاص بك، إذا كان استخدام مكتبة readline. شيء من هذا القبيل:

$ ./myscript.py
My Script version 3.1415.
Enter your commands:
myscript> B<TAB>egin
myscript> E<TAB>nd

في المثال الخاص بك تريد لإكمال على قذيفة سطر الأوامر. هذه تكملة هي ميزة قذيفة (إما bash أو zsh، مهما كنت تستخدم). انظر، على سبيل المثال، مقدمة لسحق تكملة (وأيضا <أ href = على "HTTP : //www.debian-administration.org/articles/317 "يختلط =" نوفولو noreferrer "> جزء 2 ). لzsh انظر، على سبيل المثال هذا دليل .

إذا كنت تريد البرنامج لتحديد خيار سطر الأوامر حتى ولو كنت تستخدم فقط شكل مختصر من هذا الخيار يجب أن يكون لديك نظرة على في وحدة optparse في المكتبة القياسية.

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