[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for-next v2 v2 2/5] libxl: make python scripts work with python 2.6 and up
On Wed, Mar 06, 2019 at 09:58:19PM +0100, Hans van Kranenburg wrote: > On 3/6/19 6:52 PM, Wei Liu wrote: > > Go through the transformations suggested by 2to3 and pick the > > necessary ones. > > > > Use sys.stderr.write to avoid importing from __future__. > > > > Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> > > --- > > tools/libxl/gentest.py | 2 +- > > tools/libxl/gentypes.py | 10 +++++----- > > tools/libxl/idl.py | 13 ++++++------- > > 3 files changed, 12 insertions(+), 13 deletions(-) > > > > diff --git a/tools/libxl/gentest.py b/tools/libxl/gentest.py > > index 989959fc68..81e13b437c 100644 > > --- a/tools/libxl/gentest.py > > +++ b/tools/libxl/gentest.py > > @@ -86,7 +86,7 @@ def gen_rand_init(ty, v, indent = " ", parent = None): > > > > if __name__ == '__main__': > > if len(sys.argv) < 3: > > - print >>sys.stderr, "Usage: gentest.py <idl> <implementation>" > > + sys.stderr.write("Usage: gentest.py <idl> <implementation>\n") > > sys.exit(1) > > > > random.seed(os.getenv('LIBXL_TESTIDL_SEED')) > > diff --git a/tools/libxl/gentypes.py b/tools/libxl/gentypes.py > > index 88e5c5f30e..656c157c01 100644 > > --- a/tools/libxl/gentypes.py > > +++ b/tools/libxl/gentypes.py > > @@ -576,14 +576,14 @@ def libxl_C_enum_from_string(ty, str, e, indent = " > > "): > > > > if __name__ == '__main__': > > if len(sys.argv) != 6: > > - print >>sys.stderr, "Usage: gentypes.py <idl> <header> > > <header-private> <header-json> <implementation>" > > + sys.stderr.write("Usage: gentypes.py <idl> <header> > > <header-private> <header-json> <implementation>\n") > > sys.exit(1) > > > > (_, idlname, header, header_private, header_json, impl) = sys.argv > > > > (builtins,types) = idl.parse(idlname) > > > > - print "outputting libxl type definitions to %s" % header > > + print("outputting libxl type definitions to %s" % header) > > Note that print is *not* a function in python 2, unless you.. > > from __future__ import print_function > > ...which should not be avoided. > I know. print in 2 is a statement but in 3 is a function. Yet this transformation is done by 2to3 _without_ importing print_function. I thought it was a blessed way of doing stuff. I went through those transformations. They looked correct (although I agree they were confusing). Importing print_function was specifically avoided because we wanted 2.4 compatibility at first. But now I propose to bump the requirement to 2.6, the from __future__ import print_function may become available. I will need to check if that works with 2.6. > It looks like print() just works as a function, but it's not, and I > would recommend against introducing this kind of misleading code. > > In print("hallo"), the parentheses are part of an expression, like in > ((1+ 1) * 2) > > Other syntax with parentheses creates tuples. > > Python 2.7.13 (>>> replaced with ===) > > === type(()) > <type 'tuple'> > === type((1+1)) > <type 'int'> > === type((1, 2)) > <type 'tuple'> > > === print () <- tuple > () > === print (1+1) <- expression > 2 > === print (1, 2) <- tuple > (1, 2) > > === from __future__ import print_function > === print() > > === print(1+1) > 2 > === print(1, 2) > 1 2 > > > f = open(header, "w") > > > > @@ -633,7 +633,7 @@ if __name__ == '__main__': > > f.write("""#endif /* %s */\n""" % (header_define)) > > f.close() > > > > - print "outputting libxl JSON definitions to %s" % header_json > > + print("outputting libxl JSON definitions to %s" % header_json) > > > > f = open(header_json, "w") > > > > @@ -657,7 +657,7 @@ if __name__ == '__main__': > > f.write("""#endif /* %s */\n""" % header_json_define) > > f.close() > > > > - print "outputting libxl type internal definitions to %s" % > > header_private > > + print("outputting libxl type internal definitions to %s" % > > header_private) > > > > f = open(header_private, "w") > > > > @@ -683,7 +683,7 @@ if __name__ == '__main__': > > f.write("""#endif /* %s */\n""" % header_json_define) > > f.close() > > > > - print "outputting libxl type implementations to %s" % impl > > + print("outputting libxl type implementations to %s" % impl) > > > > f = open(impl, "w") > > f.write(""" > > diff --git a/tools/libxl/idl.py b/tools/libxl/idl.py > > index 2a7f3c44fe..b5bfc66b50 100644 > > --- a/tools/libxl/idl.py > > +++ b/tools/libxl/idl.py > > @@ -11,7 +11,7 @@ DIR_BOTH = 3 > > _default_namespace = "" > > def namespace(s): > > if type(s) != str: > > - raise TypeError, "Require a string for the default namespace." > > + raise TypeError("Require a string for the default namespace.") > > global _default_namespace > > _default_namespace = s > > > > @@ -346,7 +346,7 @@ class OrderedDict(dict): > > return [(x,self[x]) for x in self.__ordered] > > > > def parse(f): > > - print >>sys.stderr, "Parsing %s" % f > > + sys.stderr.write("Parsing %s\n" % f) > > And if you have it from future anyway... > > print("Parsing", f, file=sys.stderr) > Yeah, the first version had this. But then I deleted the import and rewrote the patch. Wei. > > globs = {} > > locs = OrderedDict() > > @@ -362,11 +362,10 @@ def parse(f): > > globs[n] = t > > > > try: > > - execfile(f, globs, locs) > > - except SyntaxError,e: > > - raise SyntaxError, \ > > - "Errors were found at line %d while processing %s:\n\t%s"\ > > - %(e.lineno,f,e.text) > > + exec(compile(open(f).read(), f, 'exec'), globs, locs) > > + except SyntaxError as e: > > + raise SyntaxError("Errors were found at line %d while processing > > %s:\n\t%s"\ > > + %(e.lineno,f,e.text)) > > > > types = [t for t in locs.ordered_values() if isinstance(t,Type)] > > > > > > Hans _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |