X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=python%2Flilylib.py;h=a911cac23f0a2f8bdc77503a0e0c886becc7fa6f;hb=a6a51abfd0195a3cf7d6ea095cf69808852f21ce;hp=e893aaa3a54482599374629d71ee514bd4eddfd5;hpb=8a7f57d93480c1ac296623ef1abfda23eb9544ea;p=lilypond.git diff --git a/python/lilylib.py b/python/lilylib.py index e893aaa3a5..a911cac23f 100644 --- a/python/lilylib.py +++ b/python/lilylib.py @@ -1,6 +1,6 @@ # This file is part of LilyPond, the GNU music typesetter. # -# Copyright (C) 1998--2011 Han-Wen Nienhuys +# Copyright (C) 1998--2015 Han-Wen Nienhuys # Jan Nieuwenhuizen # # LilyPond is free software: you can redistribute it and/or modify @@ -40,9 +40,14 @@ try: import gettext t = gettext.translation ('lilypond', localedir) _ = t.ugettext + ungettext = t.ungettext except: def _ (s): return s + def ungettext (s, p, n): + if n == 1: + return s + return p underscore = _ # Urg, Python 2.4 does not define stderr/stdout encoding @@ -115,10 +120,12 @@ def is_verbose (): def stderr_write (s): encoded_write (sys.stderr, s) -def print_logmessage (level, s, fullmessage = True): +def print_logmessage (level, s, fullmessage = True, newline = True): if (is_loglevel (level)): if fullmessage: stderr_write (program_name + ": " + s + '\n') + elif newline: + stderr_write (s + '\n') else: stderr_write (s) @@ -131,11 +138,11 @@ def warning (s): def basic_progress (s): print_logmessage ("BASIC", s); -def progress (s, fullmessage = False): - print_logmessage ("PROGRESS", s, fullmessage); +def progress (s, fullmessage = False, newline = True): + print_logmessage ("PROGRESS", s, fullmessage, newline); -def debug_output (s, fullmessage = False): - print_logmessage ("DEBUG", s, fullmessage); +def debug_output (s, fullmessage = False, newline = True): + print_logmessage ("DEBUG", s, fullmessage, newline); @@ -147,9 +154,12 @@ please read 'Setup for MacOS X' in Application Usage.") os.system ("open http://python.org/download/") sys.exit (2) -# Modified version of the commands.mkarg(x), which always uses -# double quotes (since Windows can't handle the single quotes: +# A modified version of the commands.mkarg(x) that always uses +# double quotes (since Windows can't handle the single quotes) +# and escapes the characters \, $, ", and ` for unix shells. def mkarg(x): + if os.name == 'nt': + return ' "%s"' % x s = ' "' for c in x: if c in '\\$"`': @@ -191,9 +201,7 @@ def subprocess_system (cmd, stdout_setting = subprocess.PIPE if redirect_output: - stdout_filename = ' '.join([log_file, '.log']) - stderr_filename = ' '.join([log_file, '.err.log']) - stdout_setting = open(stdout_filename, 'w') + stderr_filename = log_file + '.log' stderr_setting = open(stderr_filename, 'w') proc = subprocess.Popen (cmd, @@ -206,9 +214,8 @@ def subprocess_system (cmd, if redirect_output: while proc.poll()==None: - time.sleep(1) + time.sleep(0.01) retval = proc.returncode - stdout_setting.close() stderr_setting.close() else: if show_progress: @@ -225,7 +232,7 @@ def subprocess_system (cmd, print >>sys.stderr, "Child returned", retval if ignore_error: - print >>sys.stderr, "Error ignored" + print >>sys.stderr, "Error ignored by lilylib" else: if not show_progress: print log[0] @@ -328,8 +335,15 @@ class NonDentedHeadingFormatter (optparse.IndentedHelpFormatter): def format_description(self, description): return description +class NonEmptyOptionParser (optparse.OptionParser): + "A subclass of OptionParser that gobbles empty string arguments." + + def parse_args (self, args=None, values=None): + options, args = optparse.OptionParser.parse_args (self, args, values) + return options, filter (None, args) + def get_option_parser (*args, **kwargs): - p = optparse.OptionParser (*args, **kwargs) + p = NonEmptyOptionParser (*args, **kwargs) p.formatter = NonDentedHeadingFormatter () p.formatter.set_parser (p) return p