Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 2, 2006 21:51:33

yo0hoo
От:
Зарегистрирован: 2006-06-17
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Командный интерпретатор

Можно ли как-то сделать так чтобы при считывании строки скрипт вызывал ту или иную функцию. Делаю примерно так:

func=raw_input(“Введите команду: ”)
if func=“ls”:
ls()
elif func=“rm”:
rm()
else:
default()

Но может быть есть более лучший метод?



Офлайн

#2 Ноя. 2, 2006 22:31:09

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Командный интерпретатор

Может так?
func=raw_input(“Введите команду: ”)
eval('func'+'()')



Офлайн

#3 Ноя. 2, 2006 23:34:35

yo0hoo
От:
Зарегистрирован: 2006-06-17
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Командный интерпретатор

Спасибо.
Начал было смотреть уже модуль cmd. Можете объяснить для каких целей он(cmd) вообще нужен и как с ним работать?



Офлайн

#4 Ноя. 3, 2006 06:40:57

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

Командный интерпретатор

slivlen, может не

func=raw_input(“Введите команду: ”)
eval('func'+'()')
а
func=raw_input(“Введите команду: ”)
eval(func+'()')
>>> func=raw_input(“Введите команду: ”)
Введите команду: time.localtime
>>> import time
>>> func
'time.localtime'
>>> eval('func'+'()')
Traceback (most recent call last):
File “<pyshell#3>”, line 1, in ?
eval('func'+'()')
File “<string>”, line 0, in ?
TypeError: ‘str’ object is not callable
>>> eval(func+'()')
(2006, 11, 3, 10, 7, 50, 4, 307, 0)


или вот так:

exec ‘print ’+func+'()'

PS просто интересно что лучше eval или exec?



Офлайн

#5 Ноя. 3, 2006 13:02:40

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Командный интерпретатор

pythonwin спасибо что поправил. Это просто описка была.



Офлайн

#6 Ноя. 5, 2006 19:08:45

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Командный интерпретатор

В качестве совета из категории tips&tricks: если не стоит задача дать доступ ко всем callable-объектам, то лучше сделать не eval(funcname+'()'), а eval('cmd_'+funcname+'()'), это собственно и гарантирует, что пользователь вызовет не любой callable-объект, а только из заранее предусмотренных (те, которые с префиксом cmd_)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version