【问题标题】:Execute file in ipython interpreter在 ipython 解释器中执行文件
【发布时间】:2012-11-14 08:46:00
【问题描述】:

我正在尝试在 ipython 解释器中运行一个文件。 文档使这听起来像 shell 中的 ipython file.py 或解释器本身中的 %run file.py 一样简单。但是,我想读取一个包含 ipython“系统外壳”命令的文件。这是一个例子:

files= !ls
print files

对于这种类型的命令,调用上面提到的解释器会导致 SyntaxError,就好像它是由/usr/bin/python 执行的一样。

是否可以从系统 shell 运行文件,就好像它在 ipython shell 解释器中执行一样?

【问题讨论】:

    标签: python file interpreter ipython


    【解决方案1】:

    如果您使用 .ipy 扩展名命名您的文件,您似乎可以做到这一点。

    sam@blackbird-debian:~
    $ cat tmp.ipy
    me = !whoami
    print me
    sam@blackbird-debian:~
    $ ipython tmp.ipy
    ['sam']
    

    【讨论】:

      【解决方案2】:

      我假设您想从已经运行的 IPython 会话中执行此操作。可能有一些非常更简单,但我现在能想到的是:

      get_ipython().shell.run_cell(open('path/to/commands').read())
      

      另一个疯狂的想法 - 以 EDITOR=cat ipython 启动 IPython。现在您可以使用以下命令从文件中加载命令:

      %edit -r path/to/commands
      

      不过,您的用例应该有真正的魔力。


      或者您可以以非交互方式执行相同的操作(添加 -i 以进入交互模式):

      ipython -c 'get_ipython().shell.run_cell(open("path/to/commands").read())'
      

      【讨论】:

      • 哇,第二个很有创意。我正在尝试从命令行运行一个文件,我想我不清楚(我会编辑)
      • 我不得不在你的第一个例子中去掉.shell。之后它就可以完美运行了。
      【解决方案3】:

      根据你到底想做什么,运行可能就足够了

      ipython < file
      

      来自 bash。也就是说,只需将标准输入从您的文件重定向到 ipython,以便 ipython 认为它正在获取的命令来自您的键盘。

      【讨论】:

      • 抛出异常后这不会一直盲目执行吗?
      猜你喜欢
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      • 2013-07-22
      • 1970-01-01
      相关资源
      最近更新 更多