元组解包与IPython shell转义的结合

4
如何在IPython中解压shell escape的输出?
示例(有效):
In [1]: !locate .hgrc
/home/wim/.hgrc
/usr/share/doc/mercurial-common/examples/sample.hgrc

In [2]: hgrcs = !locate .hgrc

In [3]: hgrcs[0]
Out[3]: '/home/wim/.hgrc'

但这个不起作用:
In [4]: hgrc0, *rest = !locate .hgrc
  File "<ipython-input-4-e8900264b4a8>", line 1
    hgrc0, *rest = !locate .hgrc
                   ^
SyntaxError: invalid syntax

也不工作:
In [13]: x = !locate .hgrc | head -1

In [14]: x
Out[14]: ['/home/wim/.hgrc']

In [15]: x, = !locate .hgrc | head -1
  File "<ipython-input-15-524d2c9ab16f>", line 1
    x, = !locate .hgrc | head -1
         ^
SyntaxError: invalid syntax

IPython 0.13.2 运行在 Python 3.3.2+ 上。


请确认一下,你确定你在使用Python 3吗?根据我的测试,第二个例子似乎是可以工作的。 - YS-L
2个回答

5

有点恶心,但对于这个特定情况:

hgrc0, _ = !locate .hgrc | head -1 | printf '%s\n_' $(cat)

我会继续尝试,但是IPython现在正在出现段错误... [实际上,每当在历史记录末尾按下Down键时似乎都会发生这种情况] - Ry-
谢谢,它能够工作,尽管我实际上不理解那里发生了什么。事实上,如果有两行返回,则简单的解包确实有效(例如x,y =!locate .hgrc),但是单元素解包似乎不起作用。还有展开解包。 - wim
1
嗯,IPython 显然在其自己的解包语法中不支持这个。 (也许值得提交一个错误报告?) - Ry-
1
好的,我已经在 GitHub 上提交了一个问题(issue),让我们看看会发生什么。 :) - wim
@minitech,段错误似乎是 readline 6.3 中的一个 bug。 - Thomas K

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接