आप asdf-completion
नामक एक फ़ाइल में एक पार्टी-पूर्ण स्क्रिप्ट है, जिसमें कहते हैं:
_asdf() {
COMPREPLY=()
local cur prev
cur=$(_get_cword)
COMPREPLY=($(compgen -W "one two three four five six" -- "$cur"))
return 0
}
complete -F _asdf asdf
यह काल्पनिक asdf
आदेश को पूर्ण करने का प्रदान करने के लिए खोल समारोह _asdf
उपयोग करता है। यदि हम सही पर्यावरण चर सेट करते हैं (बैश मैन पेज से), तो हम एक ही परिणाम प्राप्त कर सकते हैं, जो COMPREPLY
चर में संभावित विस्तार की नियुक्ति है। यहाँ एक unittest में कर रही है कि का एक उदाहरण है:
import subprocess
import unittest
class BashTestCase(unittest.TestCase):
def test_complete(self):
completion_file="asdf-completion"
partial_word="f"
cmd=["asdf", "other", "arguments", partial_word]
cmdline = ' '.join(cmd)
out = subprocess.Popen(['bash', '-i', '-c',
r'source {compfile}; COMP_LINE="{cmdline}" COMP_WORDS=({cmdline}) COMP_CWORD={cword} COMP_POINT={cmdlen} $(complete -p {cmd} | sed "s/.*-F \\([^ ]*\\) .*/\\1/") && echo ${{COMPREPLY[*]}}'.format(
compfile=completion_file, cmdline=cmdline, cmdlen=len(cmdline), cmd=cmd[0], cword=cmd.index(partial_word)
)],
stdout=subprocess.PIPE)
stdout, stderr = out.communicate()
self.assertEqual(stdout, "four five\n")
if (__name__=='__main__'):
unittest.main()
यह किसी भी पूर्ण करने कि -F
का उपयोग के लिए काम करना चाहिए, लेकिन साथ ही दूसरों के लिए काम कर सकते हैं।
expect
का उपयोग करने के लिए je4d की टिप्पणी अधिक पूर्ण परीक्षण के लिए एक अच्छा है।
करता है [इस] (स्थित है http:
अंतिम समाधान अजगर से बैश पूरा होने के परीक्षण करने के लिए एक सहायक वर्ग इतना है कि इसके बाद के संस्करण परीक्षण के रूप में लिखा जाएगा है : //stackoverflow.com/questions/3520936/accesssing-bash-completions-for- विशिष्ट- कमांड- प्रोग्रामेटिक रूप से) मदद करता है? हालांकि मैंने इसे खुद कोशिश नहीं की है। – Vikas
यदि आप उपयोगकर्ता इंटरैक्शन को अनुकरण करना चाहते हैं, तो 'उम्मीद' आपका मित्र है - पाइथन में अपना एफएस/एनवी सेटअप करें और फिर सबप्रोसेस के साथ एक उम्मीद स्क्रिप्ट के भीतर से बैश चलाएं। भागने मुश्किल हो सकता है, लेकिन अन्यथा यह बहुत सरल है। – je4d