On 16-Feb-21 9:44 AM, Bruce Richardson wrote:
When the dpdk-telemetry client connects to a DPDK instance, we can use the
PID provided in the initial connection message to query from /proc the name
of the process we are connected to, and display that to the user. We use
the "cmdline" procfs entry for the query since that is available on both
Linux and FreeBSD (assuming procfs is mounted on the BSD instance).

Signed-off-by: Bruce Richardson <bruce.richard...@intel.com>
---
  usertools/dpdk-telemetry.py | 5 +++++
  1 file changed, 5 insertions(+)

diff --git a/usertools/dpdk-telemetry.py b/usertools/dpdk-telemetry.py
index 181859658f..82b91f346f 100755
--- a/usertools/dpdk-telemetry.py
+++ b/usertools/dpdk-telemetry.py
@@ -45,6 +45,11 @@ def handle_socket(path):
          return
      json_reply = read_socket(sock, 1024)
      output_buf_len = json_reply["max_output_len"]
+    pid = json_reply["pid"]
+    if os.path.exists('/proc/' + str(pid) + '/cmdline'):
+        with open('/proc/' + str(pid) + '/cmdline') as f:

First of all, this is better done using os.path.join:

path = os.path.join('/proc', str(pid), 'cmdline')
if os.path.exists(path):
    with open(path) as f:
        ...

More importantly this isn't terribly Pythonic as it's not over-using exceptions :) IMO a better way would be:

try:
    with open(path) as f:
        ...
except IOError as e:
    # ignore if doesn't exist
    if e.errno != errno.ENOENT:
        raise

+            argv0 = f.read(1024).split('\0')[0]
+            print("Connected to application: '" + os.path.basename(argv0) + 
"'")

Also, formatting is better than concatenation, e.g. at least:

bname = os.path.basename(argv0)
print("Connected to application: '{}'".format(bname))

# get list of commands for readline completion
      sock.send("/".encode())



--
Thanks,
Anatoly

Reply via email to