是否可以从命令行运行PyDev代码分析?

时间:2012-07-31 01:25:27

标签: eclipse pydev code-analysis

我正在尝试运行一个无头的日食,但我已经陷入困境。我的上下文是我想使用PyDev代码分析而不必启动eclipse gui。我知道其他命令行工具来进行代码分析(pyflakes,pylint等)。

我到目前为止的命令是:

java -jar /path/to/eclipse/plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar -noSplash -data "/path/to/workspace" -application org.eclipse.jdt.apt.core.aptBuild

我的java版本1.6.0_31,我的eclipse版本是3.7.2,而我的pydev版本是2.5.0。

当我运行命令时,看起来它正在工作,但它从不会捕获任何错误或警告。

...
PyDev: Analyzing 29 of 33 (forms.py)
PyDev: Analyzing 29 of 33 (forms.py)
PyDev: Analyzing 29 of 33 (forms.py)
PyDev: Analyzing 29 of 33 (forms.py)
...

如果我tail -f /path/to/workspace/.metadata/.log,我会得到一个巨大的堆栈跟踪:

!ENTRY org.eclipse.equinox.preferences 4 2 2012-07-30 17:48:39.612
!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.equinox.preferences".
!STACK 0
java.lang.ExceptionInInitializerError
    at org.eclipse.debug.internal.ui.DebugUIPreferenceInitializer.setDefault(DebugUIPreferenceInitializer.java:186)
    at org.eclipse.debug.internal.ui.DebugUIPreferenceInitializer.setThemeBasedPreferences(DebugUIPreferenceInitializer.java:204)
    at org.eclipse.debug.internal.ui.DebugUIPreferenceInitializer.initializeDefaultPreferences(DebugUIPreferenceInitializer.java:79)
    at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper$1.run(PreferenceServiceRegistryHelper.java:281)
..... TRUNCATED ......

!ENTRY org.eclipse.osgi 4 0 2012-07-30 17:48:39.622
!MESSAGE An error occurred while automatically activating bundle org.eclipse.debug.ui (42).
!STACK 0
org.osgi.framework.BundleException: Exception in org.eclipse.debug.internal.ui.DebugUIPlugin.start() of bundle org.eclipse.debug.ui.
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
    at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:299)
..... TRUNCATED .......

java.lang.IllegalStateException: Workbench has not been created yet.
    at org.eclipse.ui.PlatformUI.getWorkbench(PlatformUI.java:92)
    at org.eclipse.debug.internal.ui.contextlaunching.LaunchingResourceManager.startup(LaunchingResourceManager.java:546)
    at org.eclipse.debug.internal.ui.DebugUIPlugin.getLaunchingResourceManager(DebugUIPlugin.java:315)
    at org.eclipse.debug.internal.ui.DebugUIPlugin.start(DebugUIPlugin.java:516)
..... TRUNCATED ......

!ENTRY org.eclipse.osgi 4 0 2012-07-30 17:48:39.624
!MESSAGE An error occurred while automatically activating bundle org.eclipse.debug.core (41).
!STACK 0
org.osgi.framework.BundleException: Exception in org.eclipse.debug.core.DebugPlugin.start() of bundle org.eclipse.debug.core.
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
    at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:299)
..... TRUNCATED ......

我怀疑PyDev需要gui来呈现错误/警告。

1 个答案:

答案 0 :(得分:2)

PyDev需要gui来呈现错误/警告,并且通常不会在命令行中使用...现在,已经说过,它确实具有运行代码分析的单元测试,而不需要gui(甚至没有eclipse加载),但你必须在内存中配置解释器/项目才能工作。

见:

https://github.com/aptana/Pydev/blob/development/plugins/com.python.pydev.analysis/tests/com/python/pydev/analysis/OccurrencesAnalyzerTest.java

https://github.com/aptana/Pydev/blob/development/plugins/com.python.pydev.analysis/tests/com/python/pydev/analysis/AnalysisTestsBase.java

进行代码分析的测试,而不需要加载eclipse工作台(即:甚至不需要eclipse运行无头 - 它可以作为一个简单的java程序运行,但你仍然需要使用CLASSPATH中的PyDev并使用其API来正确设置PyDev中使用的解释器以及projects / pythonpath)来执行java main([])。

您可以查看测试的setUp(即:不要忘记查看超类,例如CodeCompletionTestsBase / AnalysisTestsBase)。

注意:如果您确实创建了这样的主([]),请提供PyDev的补丁,因为它可能被其他人使用...

作为一个实现说明,这样的主要应该从正在启动的shell中收集所有当前的PYTHONPATH条目并在解释器中配置所有这些条目...此外,它应该可以接收一个目录作为参数,以便它分析树中的所有文件(启动可能会占用大部分时间来配置事物,所以,理想情况下,从单次运行中分析尽可能多的文件,因为PyDev代码分析是为了缓存大量的东西在启动时,然后使用来自RAM的信息 - 或者可能创建一个始终存在的服务器进程?)。