Fil*_* S. 6 python matplotlib ipython
有没有办法检测python脚本是从python或ipython shell运行,还是从命令行运行,例如python scrip.py?
我想使用它来设置我的matplotlib环境,并根据脚本的运行方式保存或显示数字.当我从命令行运行绘图脚本时,我希望脚本使用非标准的matplotlib后端并将图形保存到文件中plt.savefig(),但如果我从ipython shell中运行它In [1]: run scrip.py,我希望使用显示图形plt.show().
像这样的东西:
import matplotlib
if run_from_command_line:
matplotlib.use("non-standard-backend")
import matplotlib.pyplot as plt
if run_from_interactive_shell:
plt.ion() // Turn on interactive mode in matplotlib
// Do plotting
if run_from_command_line:
plt.savefig(filename)
else:
plt.show()
Run Code Online (Sandbox Code Playgroud)
eba*_*arr 12
方法1
在IPython中运行时,会有一个名为的全局变量集__IPYTHON__.你可以检查一下它是否存在:
try:
__IPYTHON__
except NameError:
print "Not in IPython"
else:
print "In IPython"
Run Code Online (Sandbox Code Playgroud)
方法2
正如这个线程指出的那样,您还可以get_ipython在脚本中查找该函数,不仅可以检查您是否从IPython运行,还可以检查IPython的配置.
方法3
您还可以使用inspect模块检查堆栈,并确定您是否从交互式解释器等运行.
所以一个示例文件:
# test.py
import inspect
for frame in inspect.stack():
print frame
Run Code Online (Sandbox Code Playgroud)
从命令行运行时python test.py输出为:
(<frame object at 0x100378530>, 'test.py', 3, '<module>', ['for frame in inspect.stack():\n'], 0)
Run Code Online (Sandbox Code Playgroud)
当execfile来自交互式口译员:
>>> execfile( "test.py" )
(<frame object at 0x1003795e0>, 'test.py', 3, '<module>', ['for frame in inspect.stack():\n'], 0)
(<frame object at 0x100379430>, '<stdin>', 1, '<module>', None, None)
Run Code Online (Sandbox Code Playgroud)
在IPython中运行时:
In [1]: %run test
(<frame object at 0x1029002a0>, '/Users/ebarr/Scripts/SO/test.py', 3, '<module>', ['for frame in inspect.stack():\n'], 0)
(<frame object at 0x102900020>, '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/utils/py3compat.py', 224, 'execfile', [' builtin_mod.execfile(filename, *where)\n'], 0)
(<frame object at 0x101d78e20>, '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/core/interactiveshell.py', 2537, 'safe_execfile', [' py3compat.execfile(fname,*where)\n'], 0)
(<frame object at 0x101d78c30>, '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/core/magics/execution.py', 703, 'run', [' exit_ignore=exit_ignore)\n'], 0)
(<frame object at 0x101d76390>, '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/core/magics/execution.py', 717, 'run', [' run()\n'], 0)
(<frame object at 0x101d61760>, '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/core/magic.py', 193, '<lambda>', [' call = lambda f, *a, **k: f(*a, **k)\n'], 0)
(<frame object at 0x101d761a0>, '<string>', 2, 'run', None, None)
(<frame object at 0x101d603e0>, '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/core/interactiveshell.py', 2126, 'run_line_magic', [' result = fn(*args,**kwargs)\n'], 0)
(<frame object at 0x101d5f1f0>, '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/core/interactiveshell.py', 2205, 'magic', [' return self.run_line_magic(magic_name, magic_arg_s)\n'], 0)
(<frame object at 0x101d75e40>, '<ipython-input-1-59a1e9768ae2>', 1, '<module>', [u"get_ipython().magic(u'run test')\n"], 0)
(<frame object at 0x101d75990>, '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/core/interactiveshell.py', 2883, 'run_code', [' exec(code_obj, self.user_global_ns, self.user_ns)\n'], 0)
(<frame object at 0x101d75760>, '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/core/interactiveshell.py', 2833, 'run_ast_nodes', [' if self.run_code(code):\n'], 0)
(<frame object at 0x101d71950>, '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/core/interactiveshell.py', 2741, 'run_cell', [' interactivity=interactivity, compiler=compiler)\n'], 0)
(<frame object at 0x101d6ce10>, '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/terminal/interactiveshell.py', 567, 'interact', [' self.run_cell(source_raw, store_history=True)\n'], 0)
(<frame object at 0x101d6c870>, '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/terminal/interactiveshell.py', 443, 'mainloop', [' self.interact(display_banner=display_banner)\n'], 0)
(<frame object at 0x101716d60>, '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/terminal/ipapp.py', 371, 'start', [' self.shell.mainloop()\n'], 0)
(<frame object at 0x1017006f0>, '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/config/application.py', 563, 'launch_instance', [' app.start()\n'], 0)
(<frame object at 0x1014fbdd0>, '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/__init__.py', 118, 'start_ipython', [' return launch_new_instance(argv=argv, **kwargs)\n'], 0)
(<frame object at 0x100378560>, '/Library/Frameworks/Python.framework/Versions/2.7/bin/ipython', 11, '<module>', [' sys.exit(start_ipython())\n'], 0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2014 次 |
| 最近记录: |