Найти - Пользователи
Полная версия: Командный интерпретатор
Начало » Python для экспертов » Командный интерпретатор
1
yo0hoo
Можно ли как-то сделать так чтобы при считывании строки скрипт вызывал ту или иную функцию. Делаю примерно так:

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

Но может быть есть более лучший метод?
slivlen
Может так?
func=raw_input(“Введите команду: ”)
eval('func'+'()')
yo0hoo
Спасибо.
Начал было смотреть уже модуль cmd. Можете объяснить для каких целей он(cmd) вообще нужен и как с ним работать?
pythonwin
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?
slivlen
pythonwin спасибо что поправил. Это просто описка была.
j2a
В качестве совета из категории tips&tricks: если не стоит задача дать доступ ко всем callable-объектам, то лучше сделать не eval(funcname+'()'), а eval('cmd_'+funcname+'()'), это собственно и гарантирует, что пользователь вызовет не любой callable-объект, а только из заранее предусмотренных (те, которые с префиксом cmd_)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB