2018-07-20 19:36:35

by Jeremy Cline

[permalink] [raw]
Subject: [PATCH] scripts: Add Python 3 support to tracing/draw_functrace.py

Use the print function. This maintains Python 2 support and should have
no functional change.

Signed-off-by: Jeremy Cline <[email protected]>
---
scripts/tracing/draw_functrace.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/scripts/tracing/draw_functrace.py b/scripts/tracing/draw_functrace.py
index db40fa04cd51..7d44e796d362 100755
--- a/scripts/tracing/draw_functrace.py
+++ b/scripts/tracing/draw_functrace.py
@@ -20,6 +20,7 @@ Usage:
$ scripts/draw_functrace.py < raw_trace_func > draw_functrace
Then you have your drawn trace in draw_functrace
"""
+from __future__ import print_function


import sys, re
@@ -123,7 +124,7 @@ def main():
tree = tree.getParent(caller)
tree = tree.calls(callee, calltime)

- print CallTree.ROOT
+ print(CallTree.ROOT)

if __name__ == "__main__":
main()
--
2.17.1



2018-07-25 14:41:33

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH] scripts: Add Python 3 support to tracing/draw_functrace.py

2018-07-21 4:35 GMT+09:00 Jeremy Cline <[email protected]>:
> Use the print function. This maintains Python 2 support and should have
> no functional change.
>
> Signed-off-by: Jeremy Cline <[email protected]>
> ---
> scripts/tracing/draw_functrace.py | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/tracing/draw_functrace.py b/scripts/tracing/draw_functrace.py
> index db40fa04cd51..7d44e796d362 100755
> --- a/scripts/tracing/draw_functrace.py
> +++ b/scripts/tracing/draw_functrace.py
> @@ -20,6 +20,7 @@ Usage:
> $ scripts/draw_functrace.py < raw_trace_func > draw_functrace
> Then you have your drawn trace in draw_functrace
> """
> +from __future__ import print_function

What do you need this line for?

I have not tested this,
but I guess print(CallTree.ROOT) will work for Python 2.



>
> import sys, re
> @@ -123,7 +124,7 @@ def main():
> tree = tree.getParent(caller)
> tree = tree.calls(callee, calltime)
>
> - print CallTree.ROOT
> + print(CallTree.ROOT)
>
> if __name__ == "__main__":
> main()
> --
> 2.17.1
>



--
Best Regards
Masahiro Yamada

2018-07-25 15:02:34

by Jeremy Cline

[permalink] [raw]
Subject: Re: [PATCH] scripts: Add Python 3 support to tracing/draw_functrace.py

On 07/25/2018 10:39 AM, Masahiro Yamada wrote:
> 2018-07-21 4:35 GMT+09:00 Jeremy Cline <[email protected]>:
>> Use the print function. This maintains Python 2 support and should have
>> no functional change.
>>
>> Signed-off-by: Jeremy Cline <[email protected]>
>> ---
>> scripts/tracing/draw_functrace.py | 3 ++-
>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/scripts/tracing/draw_functrace.py b/scripts/tracing/draw_functrace.py
>> index db40fa04cd51..7d44e796d362 100755
>> --- a/scripts/tracing/draw_functrace.py
>> +++ b/scripts/tracing/draw_functrace.py
>> @@ -20,6 +20,7 @@ Usage:
>> $ scripts/draw_functrace.py < raw_trace_func > draw_functrace
>> Then you have your drawn trace in draw_functrace
>> """
>> +from __future__ import print_function
>
> What do you need this line for?
>
> I have not tested this,
> but I guess print(CallTree.ROOT) will work for Python 2.

Although "print(CallTree.ROOT)" (as a statement) works in Python 2,
its behavior is different than print (as a function) in Python 3. In
this case, there's no additional arguments being provided so the
behavior will match, but if someone added an argument it would work
differently on Python 2 vs Python 3:

Python 2.7.15
>>> print("hello", "world")
('hello', 'world')

Python 3.6.6
>>> print("hello, "world")
File "<stdin>", line 1
print("hello, "world")
^
SyntaxError: invalid syntax

Importing the print_function works on Python 2.6+[0] and changes print
to be a function in Python 2 so it'll behave the same in 2 and 3. Given
that this script doesn't appear to change much it's probably not going
to save anyone from making that mistake, though. Would you prefer a
patch without it?

[0] https://docs.python.org/3/library/__future__.html

Regards,
Jeremy

>
>
>
>>
>> import sys, re
>> @@ -123,7 +124,7 @@ def main():
>> tree = tree.getParent(caller)
>> tree = tree.calls(callee, calltime)
>>
>> - print CallTree.ROOT
>> + print(CallTree.ROOT)
>>
>> if __name__ == "__main__":
>> main()
>> --
>> 2.17.1
>>
>
>
>

2018-07-28 05:43:22

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH] scripts: Add Python 3 support to tracing/draw_functrace.py

2018-07-26 0:01 GMT+09:00 Jeremy Cline <[email protected]>:
> On 07/25/2018 10:39 AM, Masahiro Yamada wrote:
>> 2018-07-21 4:35 GMT+09:00 Jeremy Cline <[email protected]>:
>>> Use the print function. This maintains Python 2 support and should have
>>> no functional change.
>>>
>>> Signed-off-by: Jeremy Cline <[email protected]>
>>> ---
>>> scripts/tracing/draw_functrace.py | 3 ++-
>>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/scripts/tracing/draw_functrace.py b/scripts/tracing/draw_functrace.py
>>> index db40fa04cd51..7d44e796d362 100755
>>> --- a/scripts/tracing/draw_functrace.py
>>> +++ b/scripts/tracing/draw_functrace.py
>>> @@ -20,6 +20,7 @@ Usage:
>>> $ scripts/draw_functrace.py < raw_trace_func > draw_functrace
>>> Then you have your drawn trace in draw_functrace
>>> """
>>> +from __future__ import print_function
>>
>> What do you need this line for?
>>
>> I have not tested this,
>> but I guess print(CallTree.ROOT) will work for Python 2.
>
> Although "print(CallTree.ROOT)" (as a statement) works in Python 2,
> its behavior is different than print (as a function) in Python 3. In
> this case, there's no additional arguments being provided so the
> behavior will match, but if someone added an argument it would work
> differently on Python 2 vs Python 3:
>
> Python 2.7.15
>>>> print("hello", "world")
> ('hello', 'world')
>
> Python 3.6.6
>>>> print("hello, "world")
> File "<stdin>", line 1
> print("hello, "world")
> ^
> SyntaxError: invalid syntax

Yes, I know this.


> Importing the print_function works on Python 2.6+[0] and changes print
> to be a function in Python 2 so it'll behave the same in 2 and 3. Given
> that this script doesn't appear to change much it's probably not going
> to save anyone from making that mistake, though. Would you prefer a
> patch without it?

Either will do.
If it is tedious to respin, I will pick this up.


I saw only one simple print statement in this script,
so I wanted to ask you if this had some reason
I might be missing.

Anyway, we will remove 'from __future__ import print_function'
when Python 2 retires.



> [0] https://docs.python.org/3/library/__future__.html
>
> Regards,
> Jeremy
>
>>
>>
>>
>>>
>>> import sys, re
>>> @@ -123,7 +124,7 @@ def main():
>>> tree = tree.getParent(caller)
>>> tree = tree.calls(callee, calltime)
>>>
>>> - print CallTree.ROOT
>>> + print(CallTree.ROOT)
>>>
>>> if __name__ == "__main__":
>>> main()
>>> --
>>> 2.17.1
>>>
>>
>>
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html



--
Best Regards
Masahiro Yamada