我有一个命令,涉及 ctags 使用 python 索引一个大目录。事情是这样的:
cmd = ['ctags', '-R', '-f', 'tagfile', 'my_large_dir']
subprocess.call(cmd)
#wait for ctags to finish then go on
这在 Win 7 和 Ubuntu 上完美运行,但不适用于 Mac OSX Mavericks。
然后我尝试从终端运行实际的 ctags 命令,它工作正常。
然后,我尝试从 python 运行 touch 命令,看看 python 是否厌恶在我的目录中创建文件,效果很好。
但是,当我运行上面的命令时,它只是卡在子进程调用上。
有什么想法吗?我很困惑,我需要在周五之前解决这个问题:(
更新:
我忘了提及我已经从 Homebrew 安装了正确版本的 ctags。正如 ren 指出的那样,当我使用 brew install ctags
(注意不使用 sudo)时,当我在/usr/bin/ctags 中查找时,它被放入/usr/local/bin/ctags 中,其中我相信仍然有错误的版本。由于某种原因,/usr/bin/中的版本就像在某处有无限循环一样挂起......奇怪。
无论如何,我将命令指向了正确的路径并且它起作用了。
最佳答案
这很可能是因为 GNU ctag 和 OSX/BSD ctag 之间不兼容。例如,OSX/BSD ctags 不接受 -R
命令行参数。
如果你绝对需要递归的能力(你可能会这样做),我建议你通过 Homebrew 安装 GNU 或 exuberant ctags。
关于Mac OSX 中的 Python ctags 子进程调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20644939/