【问题标题】:IPython !! not working巨蟒!!不工作
【发布时间】:2012-08-22 04:01:18
【问题描述】:

所以我开始在我的 Mac 上使用 IPython。这 !!应该执行 shell 命令并将输出作为有用数据的操作符正在生成语法错误。它似乎只是将其解释为(!(!ls)),并吐出!ls:找不到命令。我无法谷歌感叹号,我不知道还能去哪里

【问题讨论】:

  • 您将执行 shell 的功能(shbash 等)与 python 的 REPL 混为一谈。你能用更多细节来分解问题吗?这和python有什么关系?
  • @BrianCain 这是 IPython 的一个特性(注意前面的 I)。允许 shell 命令的增强型 REPL。
  • @Keith,好的,我现在加入了。但我仍然认为 !! 不是 OP 想要的。应该就是!吧?
  • @BrianCain IPython 确实有一个 !! 命令,可以将 shell 输出转换为一些 Python 值。在我的 Linux 系统上它工作正常(我得到一个带有In [1]: !!ls 的名称列表)。但是我没有 Mac 来测试它,所以我无法回答这个问题。或者它可能是一个新功能并且他的版本是旧的。
  • 好的,here's a reference 我猜 OP 应该检查他们的 shell 的 PATH 以确保它设置正确。

标签: python macos ipython


【解决方案1】:

我认为你可能只需要一个感叹号[docs],至少如果你想对输出做任何事情的话。例如:

localhost-2:tmp $ ipython
Python 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34) 
Type "copyright", "credits" or "license" for more information.

IPython 0.12 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: !ls
a.txt

In [2]: z = !ls

In [3]: z
Out[3]: ['a.txt']

In [4]: !!ls
Out[4]: ['a.txt']

但是(这是我假设你看到的)

In [10]: z = !!ls

In [11]: z
Out[11]: ['/bin/sh: !ls: command not found']

您可以输入 %sx? 以了解有关 !!ls 实际作用的更多信息。

【讨论】:

  • 我正在尝试加倍,根据此处的文档:ipython.org/ipython-doc/rel-0.13/interactive/…。 Single 工作得很好,但我不能将它嵌入到表达式中(即for item in !!ls
  • 据我所知,文档不包含任何表明支持的示例。您可以在行首使用!!!;你可以写name = !somecmdhere; AFAIK,就是这样。
  • 重读,看来你是对的。好吧,那没关系。我可以发誓我在某处看到它......
  • 是的,你不能将它嵌入到任意表达式中。原因是,有一些正则表达式可以识别 !cmdfoo = !cmd,但是正则表达式的功能不足以解析 Python 代码,所以我们无法在任何你想使用它的地方找到它。
【解决方案2】:

!! 快捷方式是%sx ls 魔术命令的别名。这是recently 引入的,因此您的版本可能没有该功能。

【讨论】:

  • %sx 和 !!两者都从行首开始工作,并且 %sx 与变量赋值一起工作。问题是它们都不适用于嵌入表达式
猜你喜欢
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 2014-03-02
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多