Сценарии в приложении Python

Итак, спасибо всем, кто комментирует раздел комментариев.

Если я сделаю это в пакетном файле:

set foo=Server=FOONAME\SQLEXPRESS,11433;Database=FooDatabase;Trusted_Connection=True;MultipleActiveResultSets=true

И если я сделаю это в приложении C #:

Environment.ExpandEnvironmentVariables("%foo%")

Это работа!

5
задан ibz 21 May 2011 в 12:06
поделиться

4 ответа

Использовать __import__ импортировать файлы, обеспеченные пользователем. Эта функция возвратит модуль. Используйте это для вызывания функций из импортированного файла.

Использовать try..except оба на __import__ и на фактическом вызове для фиксации ошибок.

Пример:

m = None
try:
    m = __import__("external_module")
except:
    # invalid module - show error
if m:
    try:
        m.user_defined_func()
    except:
        # some error - display it
8
ответ дан 18 December 2019 в 07:57
поделиться

Если Вы хотели бы, чтобы пользователь в интерактивном режиме ввел команды, я могу настоятельно рекомендовать модуль кода, часть стандартной библиотеки. Объекты InteractiveConsole и InteractiveInterpreter допускают легкую запись и оценку ввода данных пользователем, и ошибки обрабатываются очень приятно с tracebacks, доступным, чтобы помочь пользователю разобраться в нем.

Просто удостоверьтесь, что поймали SystemExit!

$ python
Python 2.5.1 (r251:54863, Jan 17 2008, 19:35:17) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> shared_var = "Set in main console"
>>> import code
>>> ic = code.InteractiveConsole({ 'shared_var': shared_var })
>>> try:
...     ic.interact("My custom console banner!")
... except SystemExit, e:
...     print "Got SystemExit!"
... 
My custom console banner!
>>> shared_var
'Set in main console'
>>> shared_var = "Set in sub-console"
>>> sys.exit()
Got SystemExit!
>>> shared_var
'Set in main console'
8
ответ дан 18 December 2019 в 07:57
поделиться

RestrictedPython обеспечивает ограниченную среду выполнения для Python, например, для выполнения недоверяемого кода.

4
ответ дан 18 December 2019 в 07:57
поделиться

"Мое приложение должно смочь вызвать внешние функции Python (записанный пользователем) как обратные вызовы".

Существует альтернатива, это часто более просто.

Определите классы, которые вызывают функции метода в отдельных моментах. Вы обеспечиваете реализацию по умолчанию.

Ваш пользователь может, затем расширил классы, и обеспечьте соответствующие функции метода вместо обратных вызовов.

Это редко требует глобальных переменных. Также более просто реализовать, потому что Ваш пользователь делает что-то как следующее

import core_classes
class MyExtension( core_classes.SomeClass ):
    def event_1( self, args ):
        # override the default behavior for event_1.

core_classes.main( MyExtension )

Это работает очень гладко и позволяет максимальную гибкость. Ошибки всегда будут в их коде, так как их код является "основным" модулем.

0
ответ дан 18 December 2019 в 07:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: