Skip to main content

flight-profiler-getglobal

Inspect Python module global field or class static field value in a running Python process. Use this for safe, read-only inspection of global variables, configuration objects, or class-level state.

معلومات المصدر

المستودع
alibaba/PyFlightProfiler
آخر نشاط في المصدر
١٩ أبريل ٢٠٢٦ في ١٧:٠٦
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٤٥
التفرعات
٩

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
flight-profiler-getglobal
description
Inspect Python module global field or class static field value in a running Python process. Use this for safe, read-only inspection of global variables, configuration objects, or class-level state.
# flight-profiler-getglobal Inspect Python module global field or class static field value. A safe, read-only way to check configuration, feature flags, counters, or any module-level / class-level state. > **Prerequisites:** Read the **flight-profiler-attach** skill first for platform requirements, installation, permissions, and connection details. ## When to Use - You want to check the current value of a global variable or config setting - You need to inspect a class static field - You want a safe, read-only alternative to opening a console - You need to evaluate an expression on a global object ## Usage ``` flight_profiler <pid> --cmd "getglobal module [class] field [options]" --no-color ``` ## Positional Arguments - `module` — the module name as it would be imported in the target process. For example, if the target code does `from myapp.config import settings`, then module is `myapp.config`. PyFlightProfiler locates the module via `importlib.import_module`. If you're unsure of the module name, run a separate command to resolve it first: `flight_profiler <pid> --cmd "module /absolute/path/to/file.py" --no-color`, then use the returned module name here. - `class` (optional) — class name for static field inspection - `field` — field name to inspect ## Options | Flag | Description | Default | |------|-------------|---------| | `-x, --expand <value>` | Object tree expand level (1-6, or -1 for unlimited) | `2` | | `-e, --expr <value>` | Expression to evaluate on the target. The variable `target` refers to the resolved field value. | `target` | | `-r, --raw` | Use `__str__` (equivalent to `print(obj)`) instead of default JSON serialization | off | | `-v, --verbose` | Display all nested items in list/dict without truncation | off | ## Choosing the Right `-e` Expression `-e` directly controls what you see in the output. **Always match the user's intent to the right expression** — the default `target` shows the entire object. | User intent | `-e` value | |------------|------------| | See the entire variable | `target` (default) | | See a specific dict key | `target['key']` | | See a nested field | `target['a']['b']` | | See an object attribute | `target.attr` | | Get the length / count | `len(target)` | | Check a condition | `target['key'] == expected` | | List all keys | `list(target.keys())` | ## Output Format getglobal returns immediately with a single result block: ``` EXPR: target TYPE: <class 'dict'> VALUE: { "database_url": "postgresql://localhost:5432/mydb", "debug": True, "max_connections": 10, "nested": { "level1": {'level2': 'deep_value'} } } ``` ### Output Fields | Field | Description | |-------|-------------| | `EXPR` | The expression used to extract the displayed value (default `target`) | | `TYPE` | Python type of the expression result | | `VALUE` | The value, formatted as JSON (or `__str__` if `-r`) | When the expression fails (e.g., accessing a nonexistent attribute): ``` EXPR: target.nonexistent FAILED_REASON: AttributeError: 'dict' object has no attribute 'nonexistent' ``` ## Examples ### 1. Module global variable (dict) ```bash flight_profiler <pid> --cmd "getglobal __main__ config" --no-color ``` ``` EXPR: target TYPE: <class 'dict'> VALUE: { "database_url": "postgresql://localhost:5432/mydb", "debug": True, "max_connections": 10, "nested": { "level1": {'level2': 'deep_value'} } } ``` Note: at default expand level (`-x 2`), the `nested.level1` dict is shown as a compact repr. Use `-x 3` to expand deeper (see example 5). ### 2. Module global variable (simple type) ```bash flight_profiler <pid> --cmd "getglobal __main__ counter" --no-color ``` ``` EXPR: target TYPE: <class 'int'> VALUE: 61 ``` The value reflects the live state — `counter` was 42 at startup but has been incrementing. ### 3. Class static field ```bash flight_profiler <pid> --cmd "getglobal __main__ AppConfig VERSION" --no-color ``` ``` EXPR: target TYPE: <class 'str'> VALUE: "2.1.0" ``` ### 4. Class static field (dict) ```bash flight_profiler <pid> --cmd "getglobal __main__ AppConfig FEATURES" --no-color ``` ``` EXPR: target TYPE: <class 'dict'> VALUE: { "caching": False, "logging": True, "metrics": True } ``` ### 5. Deeper expand with `-x 3` Expands nested objects one level deeper than default: ```bash flight_profiler <pid> --cmd "getglobal __main__ config -x 3" --no-color ``` ``` EXPR: target TYPE: <class 'dict'> VALUE: { "database_url": "postgresql://localhost:5432/mydb", "debug": True, "max_connections": 10, "nested": { "level1": { "level2": "deep_value" } } } ``` Compare with example 1 — `nested.level1.level2` is now fully expanded. ### 6. Expression — extract a specific field Use `-e` to drill into the object without expanding the entire tree: ```bash flight_profiler <pid> --cmd "getglobal __main__ config -e target['database_url']" --no-color ``` ``` EXPR: target['database_url'] TYPE: <class 'str'> VALUE: "postgresql://localhost:5432/mydb" ``` ### 7. Expression — compute a value ```bash flight_profiler <pid> --cmd "getglobal __main__ active_users -e len(target)" --no-color ``` ``` EXPR: len(target) TYPE: <class 'int'> VALUE: 5 ``` ### 8. Expression on class static field ```bash flight_profiler <pid> --cmd "getglobal __main__ CacheManager _store -e target['user:1']" --no-color ``` ``` EXPR: target['user:1'] TYPE: <class 'dict'> VALUE: { "age": 30, "name": "alice" } ``` ### 9. Raw mode `-r` (use `__str__` instead of JSON) ```bash flight_profiler <pid> --cmd "getglobal __main__ config -r" --no-color ``` ``` EXPR: target TYPE: <class 'dict'> VALUE: {'database_url': 'postgresql://localhost:5432/mydb', 'debug': True, 'max_connections': 10, 'nested': {'level1': {'level2': 'deep_value'}}} ``` Entire dict on one line using Python's native `__str__` representation. ### 10. Verbose mode `-v` Shows all items in lists/dicts without truncation. Useful when collections are large and default output truncates them: ```bash flight_profiler <pid> --cmd "getglobal __main__ active_users -v" --no-color ``` ``` EXPR: target TYPE: <class 'list'> VALUE: [ "alice", "bob", "charlie", "dave", "eve" ] ``` ## `-e` Expression Guide The `-e` option accepts any valid Python expression. The variable `target` refers to the resolved global variable or class static field. **Common patterns:** ```bash # Default: show the entire variable -e target # Access a dict key -e target['key'] # Access a nested field -e target['nested']['level1'] # Access an attribute -e target.attribute # Get length -e len(target) # Get type -e type(target) # List comprehension -e [k for k in target.keys()] # Check a condition -e target['debug'] == True # Slice a list -e target[:3] ``` ## Handling Command Output - **Long output**: if the inspected object is large (e.g., a big dict or deeply nested config), redirect the output to a file for the user to review later: ```bash flight_profiler <pid> --cmd "getglobal __main__ config -x 4 -v" --no-color > /tmp/getglobal_output.txt ``` - **Short output**: if the result is brief (a single value, small dict, or simple type), display the full result directly to the user so they can see it immediately. ## Handling Large Objects When an object is too large to serialize or the output is truncated/incomplete: 1. **Prefer minimal extraction** — use `-e` to extract only the fields you need, instead of the entire object: ```bash # Instead of serializing the entire config: -e target # Extract only the field you care about: -e target['database_url'] -e target['nested']['key'] -e type(target),len(target) ``` 2. **Use `-v` (verbose)** — if you do need the full object, add `-v` to disable truncation so all nested items in lists/dicts are shown completely. ## Tips - getglobal is read-only and safe — it never modifies the target process state - Default expand level is 2 (deeper than watch's default of 1) — use `-x 3` or higher for deeply nested objects - Use `-e` expressions to drill into nested objects without expanding the entire tree - `-r` (raw) uses `__str__` (like `print(obj)`) — useful for objects with custom `__str__` or when you want the native Python representation - For writable operations or complex logic, use `console` instead - Combine with `module` command if you only know the file path ## Related Commands - **console** — interactive REPL for read-write access (getglobal is read-only and safer) - **vmtool getInstances** — find instances by class (getglobal accesses known variables) - **watch** — observe a function's inputs/outputs over time (getglobal is for point-in-time inspection) ## Source Files - CLI plugin: `flight_profiler/plugins/getglobal/cli_plugin_getglobal.py` - Parser: `flight_profiler/plugins/getglobal/getglobal_parser.py` - Server plugin: `flight_profiler/plugins/getglobal/server_plugin_getglobal.py`
عرض على GitHub