fix several printb usage with python3
The following three tools are recently changed to use
printb in order to flush out the result.
opensnoop.py, tcpaccept.py, tcpconnect.py
With python3, however, these tools have errors like below:
TypeError: %b requires a bytes-like object, or an object that implements __bytes__, not 'str'
Traceback (most recent call last):
File "_ctypes/callbacks.c", line 234, in 'calling callback function'
File "/usr/lib/python3.6/site-packages/bcc/table.py", line 572, in raw_cb_
callback(cpu, data, size)
File "../../tools/opensnoop.py", line 248, in print_event
printb(b'%s' % event.fname.decode('utf-8', 'replace'))
This patch fixed printb related issues for these three tools
for python3. The python2 still works with the fix.
Signed-off-by: Yonghong Song <yhs@fb.com>
diff --git a/tools/tcpconnect.py b/tools/tcpconnect.py
index 9fd22c0..5ca6851 100755
--- a/tools/tcpconnect.py
+++ b/tools/tcpconnect.py
@@ -225,9 +225,9 @@
if args.print_uid:
print("%-6d" % event.uid, end="")
printb(b"%-6d %-12.12s %-2d %-16s %-16s %-4d" % (event.pid,
- event.task.decode('utf-8', 'replace'), event.ip,
- inet_ntop(AF_INET, pack("I", event.saddr)),
- inet_ntop(AF_INET, pack("I", event.daddr)), event.dport))
+ event.task, event.ip,
+ inet_ntop(AF_INET, pack("I", event.saddr)).encode(),
+ inet_ntop(AF_INET, pack("I", event.daddr)).encode(), event.dport))
def print_ipv6_event(cpu, data, size):
event = ct.cast(data, ct.POINTER(Data_ipv6)).contents
@@ -239,8 +239,8 @@
if args.print_uid:
print("%-6d" % event.uid, end="")
printb(b"%-6d %-12.12s %-2d %-16s %-16s %-4d" % (event.pid,
- event.task.decode('utf-8', 'replace'), event.ip,
- inet_ntop(AF_INET6, event.saddr), inet_ntop(AF_INET6, event.daddr),
+ event.task, event.ip,
+ inet_ntop(AF_INET6, event.saddr).encode(), inet_ntop(AF_INET6, event.daddr).encode(),
event.dport))
# initialize BPF