Re: [PATCH v3] perf scripts python: Add Python 3 support to export-to-sqlite.py

2019-01-21 Thread Tony Jones
On 1/21/19 2:39 AM, Seeteena Thoufeek wrote:
> Support both Python 2 and Python 3 in export-to-sqlite.py. ``print`` is
> now a function rather than a statement. This should have no functional
> change.
> 
> Also, handles the conversion of "print >> sys.stderr".
> 
> Signed-off-by: Seeteena Thoufeek 
> Reviewed-by: Ravi Bangoria 
> ---
>  tools/perf/scripts/python/export-to-sqlite.py | 19 ++-
>  1 file changed, 10 insertions(+), 9 deletions(-)
> 
> diff --git a/tools/perf/scripts/python/export-to-sqlite.py 
> b/tools/perf/scripts/python/export-to-sqlite.py
> index 245caf2..95bfcb2 100644
> --- a/tools/perf/scripts/python/export-to-sqlite.py
> +++ b/tools/perf/scripts/python/export-to-sqlite.py
> @@ -9,6 +9,7 @@
>  # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
>  # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
>  # more details.
> +from __future__ import print_function

So is the script failing for you without the above   

As I said in previous reviews you should not need this unless you are using 
features of the latest print function (end, sep etc). You will need this import 
in the other scripts (once you fix the numerous errors regarding the trailing 
comma usage) as some need to concatenate output onto one line but I don't think 
you need it here.

tony


$ python2 --version
Python 2.7.15
$ python3 --version
Python 3.6.5

$ a='print("abcd") ; print("defg")'
$ echo $a | python2
abcd
defg
$ echo $a | python3
abcd
defg

$ b='print("abcd", end="") ; print("defg")'
$ echo $b | python2
  File "", line 1
print("abcd", end="") ; print("defg")
 ^
SyntaxError: invalid syntax
$ echo $b | python3
abcddefg

$ c='from __future__ import print_function ; print("abcd", end="") ; 
print("defg")'
$ echo $c | python2
abcddefg
$ echo $c | python3
abcddefg


[PATCH v3] perf scripts python: Add Python 3 support to export-to-sqlite.py

2019-01-21 Thread Seeteena Thoufeek
Support both Python 2 and Python 3 in export-to-sqlite.py. ``print`` is
now a function rather than a statement. This should have no functional
change.

Also, handles the conversion of "print >> sys.stderr".

Signed-off-by: Seeteena Thoufeek 
Reviewed-by: Ravi Bangoria 
---
 tools/perf/scripts/python/export-to-sqlite.py | 19 ++-
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/tools/perf/scripts/python/export-to-sqlite.py 
b/tools/perf/scripts/python/export-to-sqlite.py
index 245caf2..95bfcb2 100644
--- a/tools/perf/scripts/python/export-to-sqlite.py
+++ b/tools/perf/scripts/python/export-to-sqlite.py
@@ -9,6 +9,7 @@
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 # more details.
+from __future__ import print_function
 
 import os
 import sys
@@ -61,10 +62,10 @@ perf_db_export_calls = False
 perf_db_export_callchains = False
 
 def usage():
-   print >> sys.stderr, "Usage is: export-to-sqlite.py  
[] [] []"
-   print >> sys.stderr, "where:columns 'all' or 'branches'"
-   print >> sys.stderr, "  calls   'calls' => create calls 
and call_paths table"
-   print >> sys.stderr, "  callchains  'callchains' => create 
call_paths table"
+   sys.stderr.write("Usage is: export-to-sqlite.py  
[] [] []");
+   sys.stderr.write("where:columns 'all' or 'branches'");
+   sys.stderr.write("  calls   'calls' => create calls 
and call_paths table");
+   sys.stderr.write("  callchains  'callchains' => create 
call_paths table");
raise Exception("Too few arguments")
 
 if (len(sys.argv) < 2):
@@ -100,7 +101,7 @@ def do_query_(q):
return
raise Exception("Query failed: " + q.lastError().text())
 
-print datetime.datetime.today(), "Creating database..."
+print(datetime.datetime.today(), "Creating database...")
 
 db_exists = False
 try:
@@ -376,7 +377,7 @@ if perf_db_export_calls:
call_query.prepare("INSERT INTO calls VALUES (?, ?, ?, ?, ?, ?, ?, ?, 
?, ?, ?)")
 
 def trace_begin():
-   print datetime.datetime.today(), "Writing records..."
+   print(datetime.datetime.today(), "Writing records...")
do_query(query, 'BEGIN TRANSACTION')
# id == 0 means unknown.  It is easier to create records for them than 
replace the zeroes with NULLs
evsel_table(0, "unknown")
@@ -394,13 +395,13 @@ unhandled_count = 0
 def trace_end():
do_query(query, 'END TRANSACTION')
 
-   print datetime.datetime.today(), "Adding indexes"
+   print(datetime.datetime.today(), "Adding indexes")
if perf_db_export_calls:
do_query(query, 'CREATE INDEX pcpid_idx ON calls 
(parent_call_path_id)')
 
if (unhandled_count):
-   print datetime.datetime.today(), "Warning: ", unhandled_count, 
" unhandled events"
-   print datetime.datetime.today(), "Done"
+   print(datetime.datetime.today(), "Warning: ", unhandled_count, 
" unhandled events")
+   print(datetime.datetime.today(), "Done")
 
 def trace_unhandled(event_name, context, event_fields_dict):
global unhandled_count
-- 
1.8.3.1