ऐसा लगता है कि यह अंतर्निहित %run
जादू फ़ंक्शन के साथ असंभव है। आपके प्रश्न ने मुझे एक खरगोश छेद नीचे ले लिया, हालाँकि, और मैं यह देखना चाहता था कि कुछ ऐसा ही करना कितना आसान होगा। अंत में, यह एक और जादू समारोह बनाने के लिए सभी प्रयासों के लिए जाने के लिए कुछ हद तक व्यर्थ लगता है जो बस उपयोग करता है execfile()
। शायद यह किसी के लिए कुछ काम का होगा, कहीं का।
from IPython.core.magic import register_line_magic, magics_class, line_magic, Magics
@magics_class
class StatefulMagics(Magics):
def __init__(self, shell, data):
super(StatefulMagics, self).__init__(shell)
self.namespace = data
@line_magic
def my_run(self, line):
if line[0] != "%":
return "Not a variable in namespace"
else:
filename = self.namespace[line[1:]].split('.')[0]
filename += ".py"
execfile(filename)
return line
class Macro(object):
def __init__(self, name, value):
self.name = name
self._value = value
ip = get_ipython()
magics = StatefulMagics(ip, {name: value})
ip.register_magics(magics)
def value(self):
return self._value
def __repr__(self):
return self.name
वर्गों की इस जोड़ी का उपयोग करना, (और एक पायथन स्क्रिप्ट दी गई tester.py
) यह संभव है कि नए "my_run" मैजिक फ़ंक्शन के साथ "मैक्रो" वैरिएबल बनाएं और उपयोग करें:
In [1]: from custom_magics import Macro
In [2]: Macro("somename", "tester.py")
Out[2]: somename
In [3]: %my_run %somename
I'm the test file and I'm running!
Out[3]: u'%somename'
हां, यह एक बहुत बड़ा और संभवत: बेकार हैक है। उस नस में, मुझे आश्चर्य है कि अगर मैक्रो ऑब्जेक्ट के लिए बाध्य नाम का एक तरीका है, तो मैक्रो के वास्तविक नाम के रूप में उपयोग किया जा सकता है। उस पर गौर करेंगे।
$ python file args
, इसलिए मुझे लगता है कि यह संभव नहीं है।