2012-06-13 2 views
1

Я пытаюсь реализовать python cmd, используя модуль cmd. Я хочу, чтобы автозаполнение файлов, поэтому я реализовал некоторые методы, однако, я видел, что текстовый параметр из «complete_put (self, text, line, begidx, endidx)»: «strips все символы«/». Кто-нибудь знает, почему и как я могу избежать такого поведения? Спасибо :)Slash and python cmd

+1

Добро пожаловать в SO! Не могли бы вы добавить более подробную информацию? Покажите нам свой исходный код! Что вы пробовали? Каков ваш прецедент? Что работает? А что нет? Благодаря! – jathanism

+0

Это то, что я пробовал: http://pastebin.com/Zwie5uRW Я поместил след в метод complete_put, чтобы посмотреть, какой текст. если строка «put /», текст «». Я пробовал это на python 2, кстати. – jsevilleja

+0

Похоже, что у вас есть хорошая идея о том, что вы ожидаете от поведения, если бы вы могли перевести это на [короткий, самодостаточный, правильный пример] (http://sscce.org/), это сделает ваш вопрос легче ответить. –

ответ

2

Я решил. Просто нужно было изменить атрибуты set_completer_delims.

+0

В настоящее время это больше не существует (или я просто не могу его найти?). Решение добавляет косую черту к атрибуту «identchars». – sol

+0

@ S0lll0s 'set_completer_delims'is находится в модуле ** readline **. Я только что сделал: 'delims = readline.get_completer_delims()', а затем 'readline.set_completer_delims (delims.replace ('/', ''))'. Это позволит настроить модуль readline для этого сценария. Он работает отлично (Python 3.4). – LRMAAX

0

Это код, который я использовал, он основан на нескольких примерах, найденных в Интернете.

import os 
import cmd 
import readline 
class Shell(cmd.Cmd, object): 
    def __init__(self): 
     cmd.Cmd.__init__(self) 

    def __complete_path(self, path=None): 
     return ['/bin', '/boot', '/etc'] 

    def do_put(self,args): 
     print args 

    def complete_put(self, text, line, begidx, endidx): 
     print text 
     if not text: 
      return self.__complete_path() 
     return self.__complete_path(text) 
+0

Просто попробуйте Shell(). Cmdloop() и используйте 'put /' . Это должно быть «put/bin/boot/etc» – jsevilleja