diff --git a/python/src/com/jetbrains/python/console/PydevConsoleRunner.java b/python/src/com/jetbrains/python/console/PydevConsoleRunner.java index 39490d15cb95..2f6543121a6e 100644 --- a/python/src/com/jetbrains/python/console/PydevConsoleRunner.java +++ b/python/src/com/jetbrains/python/console/PydevConsoleRunner.java @@ -8,6 +8,7 @@ import com.intellij.execution.console.LanguageConsoleViewImpl; import com.intellij.execution.process.CommandLineArgumentsProvider; import com.intellij.execution.process.ProcessOutputTypes; import com.intellij.execution.runners.AbstractConsoleRunnerWithHistory; +import com.intellij.execution.ui.ConsoleViewContentType; import com.intellij.execution.ui.RunContentDescriptor; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; @@ -18,10 +19,10 @@ import com.intellij.openapi.util.Key; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.encoding.EncodingManager; import com.intellij.psi.PsiElement; +import com.intellij.util.PathUtil; import com.intellij.util.net.NetUtils; import com.jetbrains.django.run.Runner; import com.jetbrains.django.util.DjangoUtil; -import com.jetbrains.python.PyBundle; import com.jetbrains.python.PythonHelpersLocator; import com.jetbrains.python.console.pydev.ICallback; import com.jetbrains.python.console.pydev.InterpreterResponse; @@ -43,6 +44,7 @@ public class PydevConsoleRunner extends AbstractConsoleRunnerWithHistory { private final int[] myPorts; private PydevConsoleCommunication myPydevConsoleCommunication; public static Key CONSOLE_KEY = new Key("PYDEV_CONSOLE_KEY"); + private static final String PYTHON_ENV_COMMAND = "import sys; print('Python %s on %s' % (sys.version, sys.platform))\n"; protected PydevConsoleRunner(@NotNull final Project project, @NotNull final String consoleTitle, @@ -54,9 +56,10 @@ public class PydevConsoleRunner extends AbstractConsoleRunnerWithHistory { } public static void run(@NotNull final Project project, - @NotNull final Module module, - @NotNull final Sdk sdk) { - final String consoleTitle = PyBundle.message("python.console"); + @NotNull final Sdk sdk, + final String consoleTitle, + final String projectRoot, + final String ... statements2execute) { final int[] ports; try { // File "pydev/console/pydevconsole.py", line 223, in @@ -86,9 +89,9 @@ public class PydevConsoleRunner extends AbstractConsoleRunnerWithHistory { } }; - final PydevConsoleRunner consoleRunner = new PydevConsoleRunner(project, consoleTitle, provider, DjangoUtil.getProjectRoot(module), ports); + final PydevConsoleRunner consoleRunner = new PydevConsoleRunner(project, consoleTitle, provider, projectRoot, ports); try { - consoleRunner.initAndRun(); + consoleRunner.initAndRun(statements2execute); } catch (ExecutionException e) { ExecutionHelper.showErrors(project, Arrays.asList(e), consoleTitle, null); @@ -117,20 +120,27 @@ public class PydevConsoleRunner extends AbstractConsoleRunnerWithHistory { return new PyConsoleProcessHandler(process, myConsoleView.getConsole(), getProviderCommandLine(myProvider), outputEncoding); } - @Override - public void initAndRun() throws ExecutionException { + public void initAndRun(final String[] statements2execute) throws ExecutionException { super.initAndRun(); // Propagate console communication to language console ((PydevLanguageConsoleView)myConsoleView).setPydevConsoleCommunication(myPydevConsoleCommunication); try { - Thread.sleep(200); + Thread.sleep(300); } catch (InterruptedException e) { // Ignore } - sendInput("import sys; print('Python %s on %s' % (sys.version, sys.platform))\n"); + + // Make executed statements visible to developers + final LanguageConsoleImpl console = myConsoleView.getConsole(); + PyConsoleHighlightingUtil.processOutput(console, PYTHON_ENV_COMMAND, ProcessOutputTypes.SYSTEM); + sendInput(PYTHON_ENV_COMMAND); + for (String statement : statements2execute) { + PyConsoleHighlightingUtil.processOutput(console, statement + "\n", ProcessOutputTypes.SYSTEM); + sendInput(statement+"\n"); + } } @Override @@ -216,4 +226,8 @@ public class PydevConsoleRunner extends AbstractConsoleRunnerWithHistory { public static boolean isInPydevConsole(final PsiElement element){ return element.getContainingFile().getCopyableUserData(CONSOLE_KEY) != null; } + + public static String createExtendPathCommand(Module module) { + return "sys.path.append('" + PathUtil.getCanonicalPath(DjangoUtil.getProjectRoot(module)) + "')"; + } } \ No newline at end of file diff --git a/python/src/com/jetbrains/python/console/RunPythonConsoleAction.java b/python/src/com/jetbrains/python/console/RunPythonConsoleAction.java index aec5e812cf9e..18d1ad30b5db 100644 --- a/python/src/com/jetbrains/python/console/RunPythonConsoleAction.java +++ b/python/src/com/jetbrains/python/console/RunPythonConsoleAction.java @@ -1,6 +1,5 @@ package com.jetbrains.python.console; -import com.intellij.execution.process.CommandLineArgumentsProvider; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.LangDataKeys; @@ -9,17 +8,10 @@ import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.util.IconLoader; -import com.intellij.openapi.vfs.VirtualFile; import com.jetbrains.django.util.DjangoUtil; import com.jetbrains.python.PyBundle; import com.jetbrains.python.sdk.PythonSdkType; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Collections; -import java.util.Map; /** * @author oleg @@ -62,6 +54,8 @@ public class RunPythonConsoleAction extends AnAction implements DumbAware { assert module != null : "Module is null"; assert sdk != null : "Sdk is null"; - PydevConsoleRunner.run(project, module, sdk); + PydevConsoleRunner.run(project, sdk, PyBundle.message("python.console"), DjangoUtil.getProjectRoot(module), + PydevConsoleRunner.createExtendPathCommand(module)); } + }