📄 simplerunner.java
字号:
/*
* Created on 05/08/2005
*/
package org.python.pydev.runners;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.variables.VariablesPlugin;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.osgi.service.environment.Constants;
import org.python.pydev.core.IPythonPathNature;
import org.python.pydev.core.REF;
import org.python.pydev.core.Tuple;
import org.python.pydev.core.docutils.StringUtils;
import org.python.pydev.core.log.Log;
import org.python.pydev.plugin.PydevPlugin;
import org.python.pydev.plugin.nature.PythonNature;
public abstract class SimpleRunner {
/**
* Just execute the string. Does nothing else.
*/
public Process createProcess(String executionString, File workingDir) throws IOException {
return Runtime.getRuntime().exec(executionString, null, workingDir);
}
/**
* THIS CODE IS COPIED FROM org.eclipse.debug.internal.core.LaunchManager
*
* changed so that we always set the PYTHONPATH in the environment
*
* @return the system environment with the PYTHONPATH env variable added for a given project (if it is null, return it with the
* default PYTHONPATH added).
*/
public String[] getEnvironment(IProject project, String interpreter) throws CoreException {
PythonNature pythonNature = PythonNature.getPythonNature(project);
if(pythonNature == null){ //no associated nature in the project... just get the default env
return getDefaultSystemEnvAsArray();
}
String pythonPathEnvStr = "";
try {
if (PydevPlugin.getInterpreterManager(pythonNature).hasInfoOnInterpreter(interpreter)){ //check if we have a default interpreter.
pythonPathEnvStr = makePythonPathEnvString(project, interpreter);
}
} catch (Exception e) {
PydevPlugin.log(e);
return null; //we cannot get it
}
DebugPlugin defaultPlugin = DebugPlugin.getDefault();
if(defaultPlugin != null){
Map<String,String> env = getDefaultSystemEnv(defaultPlugin);
env.put("PYTHONPATH", pythonPathEnvStr); //put the environment
return getMapEnvAsArray(env);
}else{
return null;
}
}
/**
* @return an array with the env variables for the system with the format xx=yy
*/
public String[] getDefaultSystemEnvAsArray() throws CoreException {
Map<String,String> defaultSystemEnv = getDefaultSystemEnv();
if(defaultSystemEnv != null){
return getMapEnvAsArray(defaultSystemEnv);
}
return null;
}
/**
* @return a map with the env variables for the system
*/
public Map<String,String> getDefaultSystemEnv() throws CoreException {
DebugPlugin defaultPlugin = DebugPlugin.getDefault();
return getDefaultSystemEnv(defaultPlugin);
}
/**
* @return a map with the env variables for the system
*/
@SuppressWarnings("unchecked")
private Map<String,String> getDefaultSystemEnv(DebugPlugin defaultPlugin) throws CoreException {
if(defaultPlugin != null){
ILaunchManager launchManager = defaultPlugin.getLaunchManager();
// build base environment
Map<String,String> env = new HashMap<String,String>();
env.putAll(launchManager.getNativeEnvironment());
// Add variables from config
boolean win32= isWindowsPlatform();
for(Iterator iter= env.entrySet().iterator(); iter.hasNext(); ) {
Map.Entry entry= (Map.Entry) iter.next();
String key= (String) entry.getKey();
if (win32) {
// Win32 vars are case insensitive. Uppercase everything so
// that (for example) "pAtH" will correctly replace "PATH"
key= key.toUpperCase();
}
String value = (String) entry.getValue();
// translate any string substitution variables
String translated = value;
try {
translated = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(value, false);
} catch (Exception e) {
Log.log(e);
}
env.put(key, translated);
}
return env;
}
return null;
}
/**
* @return whether we are in windows or not
*/
public static boolean isWindowsPlatform() {
try {
return Platform.getOS().equals(Constants.OS_WIN32);
} catch (NullPointerException e) {
String env = System.getProperty("os.name");
if(env.toLowerCase().indexOf("win") != -1){
return true;
}
return false;
}
}
/**
* copied from org.eclipse.jdt.internal.launching.StandardVMRunner
* @param args - other arguments to be added to the command line (may be null)
* @return
*/
public static String getCommandLineAsString(String[] commandLine, String ... args) {
if(args != null && args.length > 0){
String[] newCommandLine = new String[commandLine.length + args.length];
System.arraycopy(commandLine, 0, newCommandLine, 0, commandLine.length);
System.arraycopy(args, 0, newCommandLine, commandLine.length, args.length);
commandLine = newCommandLine;
}
if (commandLine.length < 1)
return ""; //$NON-NLS-1$
StringBuffer buf= new StringBuffer();
for (int i= 0; i < commandLine.length; i++) {
if(commandLine[i] == null){
continue; //ignore nulls (changed from original code)
}
buf.append(' ');
char[] characters= commandLine[i].toCharArray();
StringBuffer command= new StringBuffer();
boolean containsSpace= false;
for (int j = 0; j < characters.length; j++) {
char character= characters[j];
if (character == '\"') {
command.append('\\');
} else if (character == ' ') {
containsSpace = true;
}
command.append(character);
}
if (containsSpace) {
buf.append('\"');
buf.append(command.toString());
buf.append('\"');
} else {
buf.append(command.toString());
}
}
return buf.toString();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -