Class PrePy
- Direct Known Subclasses:
Py
PyObject
, for example when creating
the first interpreter. When preparing an application (from the command line options, say) for
creation of the first interpreter, it useful to defer type system creation until pre-Python
configuration is complete. See PEP 432 for further rationale.
Creation of the type system may happen as a side effect of referring using (almost) any object
from a class that statically refers to a PyObject
, for example Py
or
PySystemState
. The present class is intended to hold utility methods and configuration
useful in the pre-Python phase.
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
Options.verbose
level providing detail during correct functioning.static final int
Options.verbose
level providing detail in support of debugging or tracing.static final int
Options.verbose
level indicating an error that prevents correct results.static final int
Options.verbose
level for messages that confirm correct functioning.static final int
Options.verbose
level indicating an unexpected event, still working correctly. -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic String
getCommandResult
(String... command) Run a command as a sub-process and return as the result the first line of output that consists of more than white space.static String
getCommandResultWindows
(String... command) A specialised wrapper ongetCommandResult(String...)
for the Windows platform, where we have to consult the environment variableComSpec
to locate the command processor.static String
Infers the usual Jython bin-dir from the position of the jar-file returned bygetJarFileName()
byr replacing the file name with "bin".static String
Infers the usual Jython executable name from the position of the jar-file returned bygetJarFileName()
by replacing the file name with "bin/jython".static String
Utility-method to obtain the name (including absolute path) of the currently used jython-jar-file.static String
getJarFileNameFromURL
(URL url) Return the path in the file system (as a string) of a JAR located using the URL of a class file that it contains.static Level
Convenience function to get the effective level of Logger "org.python".static Properties
Get the System properties if we are allowed to.static String
getSystemProperty
(String key, String defaultValue) Get a System property if it is defined, not null, and we are allowed to access it, otherwise return the given default.static boolean
Returntrue
iff the console is accessible through System.console().static void
increaseLoggingLevel
(int n) Adjust the level of the Jython logger "org.python" using the traditional "verbosity" system: the bigger the number, the lower the logging threshold.static boolean
Determine whether standard input is an interactive stream.static boolean
isInteractive
(InputStream fp, String filename) Check whether an input stream is interactive.static Level
levelFromVerbosity
(int verbosity) Translate from the traditional "verbosity" system to JUL Level.static void
maybeWrite
(String type, String msg, int verbosity) Log a message at a specified level (if that level is not below the threshold).static Level
setLoggingLevel
(Level newLevel) Set the level of the Jython logger "org.python" using the standardjava.util.logging
scale.static int
verbosityFromLevel
(Level level) Translate from JUL Level to equivalent in the traditional "verbosity" system.static void
writeComment
(String type, String msg) Submit a message to logging at the severity level COMMENT.static void
writeDebug
(String type, String msg) Submit a message to logging at the severity level DEBUG.static void
writeError
(String type, String msg) Submit a message to logging at the severity level ERROR.static void
writeMessage
(String type, String msg) Submit a message to logging at the severity level MESSAGE.static void
writeWarning
(String type, String msg) Submit a message to logging at the severity level WARNING.
-
Field Details
-
ERROR
public static final int ERROROptions.verbose
level indicating an error that prevents correct results.- See Also:
-
WARNING
public static final int WARNINGOptions.verbose
level indicating an unexpected event, still working correctly.- See Also:
-
MESSAGE
public static final int MESSAGEOptions.verbose
level for messages that confirm correct functioning.- See Also:
-
COMMENT
public static final int COMMENTOptions.verbose
level providing detail during correct functioning.- See Also:
-
DEBUG
public static final int DEBUGOptions.verbose
level providing detail in support of debugging or tracing.- See Also:
-
-
Constructor Details
-
PrePy
public PrePy()
-
-
Method Details
-
levelFromVerbosity
-
verbosityFromLevel
Translate from JUL Level to equivalent in the traditional "verbosity" system. We return Jython verbosity values beyond the conventional range, enough to enumerate the Java standard levels (e.gFINER
returns 4 andALL
returns 6 ).- Parameters:
level
-java.util.logging.Level
to translate.- Returns:
- integer verbosity, where the runtime default
INFO
= 1
-
getLoggingLevel
Convenience function to get the effective level of Logger "org.python". -
setLoggingLevel
Set the level of the Jython logger "org.python" using the standardjava.util.logging
scale. For backward compatibility with the traditional "verbosity" system, make a corresponding setting ofOptions.verbose
.- Parameters:
newLevel
- to set- Returns:
- previous logging level
-
increaseLoggingLevel
public static void increaseLoggingLevel(int n) Adjust the level of the Jython logger "org.python" using the traditional "verbosity" system: the bigger the number, the lower the logging threshold. This is primarily for the command-line Jython, where each "-v" increases the verbosity by one, on thejava.util.logging
scale.- Parameters:
n
- increment on the scale1=INFO, 2=CONFIG, 3=FINE, ...
-
maybeWrite
Log a message at a specified level (if that level is not below the threshold). -
writeError
Submit a message to logging at the severity level ERROR. -
writeWarning
Submit a message to logging at the severity level WARNING. -
writeMessage
Submit a message to logging at the severity level MESSAGE. -
writeComment
Submit a message to logging at the severity level COMMENT. -
writeDebug
Submit a message to logging at the severity level DEBUG. -
getSystemProperties
Get the System properties if we are allowed to. Configuration values set via-Dprop=value
to the java command will be found here. If a security manager prevents access, we will return a new (empty) object instead.- Returns:
System
properties or a newProperties
object
-
getSystemProperty
Get a System property if it is defined, not null, and we are allowed to access it, otherwise return the given default.- Parameters:
key
- of the entry to returndefaultValue
- to return if null or disallowed- Returns:
- property value or given default
-
isInteractive
public static boolean isInteractive()Determine whether standard input is an interactive stream. If the Java system propertypython.launcher.tty
is defined and equal totrue
orfalse
, then that provides the result. This property is normally supplied by the launcher. In the absence of this certainty, we usehaveConsole()
.- Returns:
- true if (we think) standard input is an interactive stream
-
haveConsole
public static boolean haveConsole()Returntrue
iff the console is accessible through System.console(). -
isInteractive
Check whether an input stream is interactive. This emulates CPythonPy_FdIsInteractive
within the constraints of pure Java. The input stream is considered ``interactive'' if either- it is
System.in
andisInteractive()
istrue
, or - the
-i
flag was given (Options.interactive
=true
), and the filename associated with it isnull
or"<stdin>"
or"???"
.
- Parameters:
fp
- stream (tested only forSystem.in
)filename
-- Returns:
- true iff thought to be interactive
- it is
-
getDefaultExecutableName
Infers the usual Jython executable name from the position of the jar-file returned bygetJarFileName()
by replacing the file name with "bin/jython". This is intended as an easy fallback for cases wheresys.executable
isNone
due to direct launching via the java executable.Note that this does not necessarily return the actual executable, but instead infers the place where it is usually expected to be. Use
sys.executable
to get the actual executable (may beNone
.- Returns:
- usual Jython-executable as absolute path
-
getDefaultBinDir
Infers the usual Jython bin-dir from the position of the jar-file returned bygetJarFileName()
byr replacing the file name with "bin". This is intended as an easy fallback for cases wheresys.executable
isnull
due to direct launching via the java executable.Note that this does not necessarily return the actual bin-directory, but instead infers the place where it is usually expected to be.
- Returns:
- usual Jython bin-dir as absolute path
-
getJarFileName
Utility-method to obtain the name (including absolute path) of the currently used jython-jar-file. Usually this is jython.jar, but can also be jython-dev.jar or jython-standalone.jar or something custom.- Returns:
- the full name of the jar file containing this class,
null
if not available.
-
getJarFileNameFromURL
Return the path in the file system (as a string) of a JAR located using the URL of a class file that it contains. Classes in Java can be asked for the URL of their associated resources (including their own class definition), and so the caller of this method may present such a URL as the basis for locating the JAR from which it came.Three protocols are supported, Java JAR-file protocol, and two JBoss protocols "vfs" and "vfszip".
The JAR-file protocol URL, which must be a
jar:file:
reference to a contained element (that is, it has a "!/" part) is able to identify an actual JAR in a file system that may then be opened usingjarFile = new JarFile(jarFileName)
. The path to the JAR is returned. If the JAR is accessed by another mechanism (http:
say) this will fail.The JBoss URL must be a reference to a class in
vfs:<JAR>/org/python/core/
, or the same thing using thevfszip:
protocol, where <JAR> stands for the absolute path to the Jython JAR in VFS. There is no "!/" marker: in JBoss VFS a JAR is treated just like a directory and can no longer be opened as a JAR. The method essentially just swaps a VFS protocol for the Javafile:
protocol. The path returned will be correct only if this naive swap is valid.- Parameters:
url
- into the JAR- Returns:
- the file path or
null
in the event of a detectable error
-
getCommandResult
Run a command as a sub-process and return as the result the first line of output that consists of more than white space. It returns "" on any kind of error.- Parameters:
command
- as strings (as forProcessBuilder
)- Returns:
- the first line with content, or ""
-
getCommandResultWindows
A specialised wrapper ongetCommandResult(String...)
for the Windows platform, where we have to consult the environment variableComSpec
to locate the command processor.- Parameters:
command
- as strings (as forProcessBuilder
)- Returns:
- the first line with content, or ""
-