Попробуйте, он генерирует событие при нажатии клавиши, а когда нажатие клавиши прекращается, через 500 мс появляется событие nottyping
, чтобы прекратить показывать вам сообщение о наборе
var typing = false;
function typingstopped(){
typing = false;
socket.emit(notTyping);
}
function onKeyDown(){
if(typing == false) {
typing = true
socket.emit(typing);
time = setTimeout(typingstopped, 500);
} else {
clear(time);
time = setTimeout(typingstopped, 500);
}
}
vinko@mithril$ more a.py def foo(a): print a vinko@mithril$ more b.py import a import inspect a.foo(89) print inspect.getsource(a.foo) vinko@mithril$ python b.py 89 def foo(a): print a
Вы спрашиваете об этом?
def writeoptions(directory):
options=""
options+="starting_length=%s%s"%(starting_length,os.linesep)
options+="starting_cell_size=%s%s"%(starting_cell_size,os.linesep)
options+="LengthofExperiments=%s%s"%(LengthofExperiments,os.linesep)
options+="def pippo(a,b):%s" % ( os.linesep, )
options+=" '''Some version of pippo'''%s" % ( os.linesep, )
options+=" return 2*a+b%s" % ( os.linesep, )
open("%s%soptions.py"%(directory,os.sep),'w').write(options)
Или что-то еще?
В то время как возможно сделать то, что Вы спрашиваете (поскольку Vinko показал), я сказал бы, что это более чисто для совместного использования кода. Поместить pippo
и его приятели в подмодуле, к которому могут получить доступ обе программы.
Вместо того, чтобы погрузиться в предмет дизассемблеров и байт-кодов (например, осматривают), почему Вы только не сохраняете сгенерированный источник Python в модуле (file.py), и позже, импортируют его?
Я предложил бы изучить более стандартный способ обработать что Вы колл-опционы. Например, можно использовать модуль JSON и сохранить или восстановить данные. Или изучите маршала и засолите модули.
Вы могли бы также рассмотреть некоторые другие средства персистентности данных. В моем собственном (астрономия) исследуют, я экспериментировал с двумя различными средствами хранения сценариев для воспроизводимости. Первое должно иметь их исключительно в репозитории подверсии и затем иметь сценарий представления задания, автоматически фиксируют их. Например, если Вы просто хотели сделать это в ударе:
alias run_py='svn ci -m "Commit before running"; python2.5 $*'
и в сценарии, снабди префиксом вывод текущее число пересмотра подверсии для того файла, у Вас была бы запись каждого скрипта, который был запущен и каков вход был. Вы могли вытащить эту спину из подверсии как потребность быть.
Другой, существенно менее полнофункциональный, средства отслеживания входа к функции мог быть через что-то как LodgeIt, pastebin, который принимает вход XML-RPC и идет с привязкой Python. (Это может быть установлено локально и имеет поддержку ответа на и обновления существующих вставок.)
Но, если Вы ищете относительно небольшой объем кода, который будет включен, использование решения Vinko осматривают, должен работать вполне хорошо. Doug Hellman, застрахованный inspect
модуль в его Модуле Python серии Week. Вы могли создать декоратора, который исследует каждую опцию и аргумент и затем распечатывает его как соответствующий (я буду использовать inspect.getargspec
получить названия аргументов.)
import inspect
from functools import wraps
def option_printer(func):
@wraps(func)
def run_func(*args, **kwargs):
for name, arg in zip(inspect.getargspec(func)[0], args) \
+ sorted(kwargs.items()):
if isinstance(arg, types.FunctionType):
print "Function argument '%s' named '%s':\n" % (name, func.func_name)
print inspect.getsource(func)
else:
print "%s: %s" % (name, arg)
return func(*args, **kwargs)
return run_func
Это могло, вероятно, быть сделано немного более изящным, но в моих тестах это работает на простые наборы аргументов и переменных. Кроме того, это могло бы испытать некоторые затруднения из-за лямбд.