You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by mi...@apache.org on 2016/08/12 07:25:40 UTC
zeppelin git commit: [ZEPPELIN-1287][branch-0.6] No need to call
print to display output in PythonInterpreter
Repository: zeppelin
Updated Branches:
refs/heads/branch-0.6 eebca5928 -> ad4e9e054
[ZEPPELIN-1287][branch-0.6] No need to call print to display output in PythonInterpreter
### What is this PR for?
Implement #1278 to merge branch-0.6
### What type of PR is it?
Bug Fix
### What is the Jira issue?
[ZEPPELIN-1287](https://issues.apache.org/jira/browse/ZEPPELIN-1287)
### Questions:
* Does the licenses files need update? no
* Is there breaking changes for older versions? no
* Does this needs documentation? no
Author: Mina Lee <mi...@apache.org>
Closes #1320 from minahlee/branch-0.6_ZEPPELIN-1287 and squashes the following commits:
f99f8aa [Mina Lee] return result directly
ac83b14 [Mina Lee] No need to call print to display output in PythonInterpreter
Project: http://git-wip-us.apache.org/repos/asf/zeppelin/repo
Commit: http://git-wip-us.apache.org/repos/asf/zeppelin/commit/ad4e9e05
Tree: http://git-wip-us.apache.org/repos/asf/zeppelin/tree/ad4e9e05
Diff: http://git-wip-us.apache.org/repos/asf/zeppelin/diff/ad4e9e05
Branch: refs/heads/branch-0.6
Commit: ad4e9e05461b2f203cf4fc73524216e0ee4d1c17
Parents: eebca59
Author: Mina Lee <mi...@apache.org>
Authored: Fri Aug 12 05:01:45 2016 +0200
Committer: Mina Lee <mi...@apache.org>
Committed: Fri Aug 12 09:25:30 2016 +0200
----------------------------------------------------------------------
.../zeppelin/python/PythonInterpreter.java | 6 ++--
.../apache/zeppelin/python/PythonProcess.java | 33 +++++++++-----------
python/src/main/resources/bootstrap.py | 5 ++-
.../zeppelin/python/PythonInterpreterTest.java | 8 ++---
4 files changed, 25 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ad4e9e05/python/src/main/java/org/apache/zeppelin/python/PythonInterpreter.java
----------------------------------------------------------------------
diff --git a/python/src/main/java/org/apache/zeppelin/python/PythonInterpreter.java b/python/src/main/java/org/apache/zeppelin/python/PythonInterpreter.java
index 1a0469a..10d12db 100644
--- a/python/src/main/java/org/apache/zeppelin/python/PythonInterpreter.java
+++ b/python/src/main/java/org/apache/zeppelin/python/PythonInterpreter.java
@@ -138,8 +138,10 @@ public class PythonInterpreter extends Interpreter {
return new InterpreterResult(Code.SUCCESS, "");
}
String output = sendCommandToPython(cmd);
- return new InterpreterResult(Code.SUCCESS, output.replaceAll(">>>", "")
- .replaceAll("\\.\\.\\.", "").trim());
+
+ // TODO(zjffdu), we should not do string replacement operation in the result, as it is
+ // possible that the output contains the kind of pattern itself, e.g. print("...")
+ return new InterpreterResult(Code.SUCCESS, output.replaceAll("\\.\\.\\.", ""));
}
@Override
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ad4e9e05/python/src/main/java/org/apache/zeppelin/python/PythonProcess.java
----------------------------------------------------------------------
diff --git a/python/src/main/java/org/apache/zeppelin/python/PythonProcess.java b/python/src/main/java/org/apache/zeppelin/python/PythonProcess.java
index a671224..8eaf5e7 100644
--- a/python/src/main/java/org/apache/zeppelin/python/PythonProcess.java
+++ b/python/src/main/java/org/apache/zeppelin/python/PythonProcess.java
@@ -21,12 +21,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
-import java.io.BufferedWriter;
import java.io.InputStream;
-import java.io.OutputStream;
import java.io.IOException;
-import java.io.OutputStreamWriter;
import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.io.OutputStream;
import java.lang.reflect.Field;
/**
@@ -35,11 +34,11 @@ import java.lang.reflect.Field;
*/
public class PythonProcess {
-
- Logger logger = LoggerFactory.getLogger(PythonProcess.class);
+ private static final Logger logger = LoggerFactory.getLogger(PythonProcess.class);
+ private static final String STATEMENT_END = "*!?flush reader!?*";
InputStream stdout;
OutputStream stdin;
- BufferedWriter writer;
+ PrintWriter writer;
BufferedReader reader;
Process process;
private String binPath;
@@ -56,7 +55,7 @@ public class PythonProcess {
process = builder.start();
stdout = process.getInputStream();
stdin = process.getOutputStream();
- writer = new BufferedWriter(new OutputStreamWriter(stdin));
+ writer = new PrintWriter(stdin, true);
reader = new BufferedReader(new InputStreamReader(stdout));
try {
pid = findPid();
@@ -92,25 +91,23 @@ public class PythonProcess {
}
public String sendAndGetResult(String cmd) throws IOException {
-
- writer.write(cmd + "\n\n");
- writer.write("print (\"*!?flush reader!?*\")\n\n");
- writer.flush();
-
- String output = "";
- String line;
- while (!(line = reader.readLine()).contains("*!?flush reader!?*")) {
+ writer.println(cmd);
+ writer.println();
+ writer.println("\"" + STATEMENT_END + "\"");
+ StringBuilder output = new StringBuilder();
+ String line = null;
+ while (!(line = reader.readLine()).contains(STATEMENT_END)) {
logger.debug("Readed line from python shell : " + line);
if (line.equals("...")) {
logger.warn("Syntax error ! ");
- output += "Syntax error ! ";
+ output.append("Syntax error ! ");
break;
}
- output += "\r" + line + "\n";
+ output.append(line + "\n");
}
- return output;
+ return output.toString();
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ad4e9e05/python/src/main/resources/bootstrap.py
----------------------------------------------------------------------
diff --git a/python/src/main/resources/bootstrap.py b/python/src/main/resources/bootstrap.py
index e225f03..f08420a 100644
--- a/python/src/main/resources/bootstrap.py
+++ b/python/src/main/resources/bootstrap.py
@@ -25,14 +25,13 @@ try:
except ImportError:
import io as io
-sys.displayhook = lambda x: None
-
def intHandler(signum, frame): # Set the signal handler
print ("Paragraph interrupted")
raise KeyboardInterrupt()
signal.signal(signal.SIGINT, intHandler)
-
+# set prompt as empty string so that java side don't need to remove the prompt.
+sys.ps1=""
def help():
print ('%html')
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ad4e9e05/python/src/test/java/org/apache/zeppelin/python/PythonInterpreterTest.java
----------------------------------------------------------------------
diff --git a/python/src/test/java/org/apache/zeppelin/python/PythonInterpreterTest.java b/python/src/test/java/org/apache/zeppelin/python/PythonInterpreterTest.java
index 35f4e2b..b33d238 100644
--- a/python/src/test/java/org/apache/zeppelin/python/PythonInterpreterTest.java
+++ b/python/src/test/java/org/apache/zeppelin/python/PythonInterpreterTest.java
@@ -132,7 +132,7 @@ public class PythonInterpreterTest {
*/
try {
- when(mockPythonProcess.sendAndGetResult(eq("\n\nimport py4j\n"))).thenReturn(">>>");
+ when(mockPythonProcess.sendAndGetResult(eq("\n\nimport py4j\n"))).thenReturn("");
} catch (IOException e) {
e.printStackTrace();
}
@@ -157,7 +157,7 @@ public class PythonInterpreterTest {
public void testClose() {
try {
- when(mockPythonProcess.sendAndGetResult(eq("\n\nimport py4j\n"))).thenReturn(">>>");
+ when(mockPythonProcess.sendAndGetResult(eq("\n\nimport py4j\n"))).thenReturn("");
} catch (IOException e) {
e.printStackTrace();
}
@@ -222,11 +222,11 @@ public class PythonInterpreterTest {
String output = "";
for (int i = 0; i < lines.length; i++) {
- output += ">>>" + lines[i];
+ output += lines[i];
}
return output;
} else {
- return ">>>";
+ return "";
}
}