Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,10 @@ public InterpreterResult interpret(String cmd, InterpreterContext contextInterpr
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("\\.\\.\\.", ""));
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

return it directly ?

return new InterpreterResult(Code.SUCCESS, output.replaceAll("\\.\\.\\.", ""));


@Override
Expand Down
33 changes: 15 additions & 18 deletions python/src/main/java/org/apache/zeppelin/python/PythonProcess.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,11 @@
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;

/**
Expand All @@ -35,11 +34,11 @@
*/

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;
Expand All @@ -56,7 +55,7 @@ public void open() throws IOException {
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();
Expand Down Expand Up @@ -92,25 +91,23 @@ public void interrupt() throws IOException {
}

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();

}

Expand Down
5 changes: 2 additions & 3 deletions python/src/main/resources/bootstrap.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,13 @@
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')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ public void testPy4JInstalled() {
*/

try {
when(mockPythonProcess.sendAndGetResult(eq("\n\nimport py4j\n"))).thenReturn(">>>");
when(mockPythonProcess.sendAndGetResult(eq("\n\nimport py4j\n"))).thenReturn("");
} catch (IOException e) {
e.printStackTrace();
}
Expand All @@ -157,7 +157,7 @@ public void testPy4JInstalled() {
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();
}
Expand Down Expand Up @@ -222,11 +222,11 @@ private String answerFromPythonMock(InvocationOnMock invocationOnMock) {
String output = "";

for (int i = 0; i < lines.length; i++) {
output += ">>>" + lines[i];
output += lines[i];
}
return output;
} else {
return ">>>";
return "";
}
}

Expand Down