2019-01-21 10:40:50

by Seeteena Thoufeek

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

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 <[email protected]>
Reviewed-by: Ravi Bangoria <[email protected]>
---
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 <database name> [<columns>] [<calls>] [<callchains>]"
- 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 <database name> [<columns>] [<calls>] [<callchains>]");
+ 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



2019-01-21 17:44:10

by Tony Jones

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

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 <[email protected]>
> Reviewed-by: Ravi Bangoria <[email protected]>
> ---
> 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 "<stdin>", 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