在 Bash 中获取 Python 模块变量列

在 Bash 中获取 Python 模块的变量列表可以通过使用 python -c 来运行 Python 代码并输出变量名列表。

在这里插入图片描述

1、问题背景

在编写 Bash 补全脚本时,需要获取已安装 Python 模块中与模式匹配的所有变量。为了避免解析注释等内容,希望仅使用 Python 相关功能。

2、解决方案

方法一:使用 Python -c 执行单行 Python 脚本

如果只想执行单行 Python 脚本,可以使用 python -c 命令。例如:

python -c "import os; print dir(os)"

输出结果为:

['DirEntry', 'F_OK', 'MutableMapping', 'O_APPEND', 'O_CREAT', 'O_EXCL', 'O_RDONLY', 'O_RDWR', 'O_TRUNC', 'O_WRONLY', 'P_NOWAIT', 'P_NOWAITO', 'P_WAIT', 'POSIX_FADV_DONTNEED', 'POSIX_FADV_NOREUSE', 'POSIX_FADV_NORMAL', 'POSIX_FADV_RANDOM', 'POSIX_FADV_SEQUENTIAL', 'POSIX_FADV_WILLNEED', 'R_OK', 'S_IEXEC', 'S_IFBLK', 'S_IFCHR', 'S_IFDIR', 'S_IFIFO', 'S_IFLNK', 'S_IFREG', 'S_IFMT', 'S_IMODE', 'S_ISBLK', 'S_ISCHR', 'S_ISDIR', 'S_ISFIFO', 'S_ISLNK', 'S_ISREG', 'S_ISUID', 'S_ISVTX', 'ST_APPEND', 'ST_MANDLOCK', 'ST_NOATIME', 'ST_NODEV', 'ST_NODIRATIME', 'ST_NOSUID', 'ST_RDONLY', 'ST_RELATIME', 'ST_SYNCHRONOUS', 'ST_SIZE', 'W_OK', 'X_OK', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'abc', 'access', 'altsep', 'argv', 'basestring', 'bool', 'bytearray', 'bytes', 'callable', 'choices', 'classdict', 'classmethod', 'clearcache', 'close', 'coerce_argspec', 'compile', 'complex', 'copyright', 'credits', 'dd', 'deque', 'device_encoding', 'dir', 'displayhook', 'divmod', 'encode', 'enumerate', 'environ', 'EOFError', 'error', 'execfile', 'execv', 'execve', 'exit', 'expandtabs', 'expandvars', 'False', 'fdopen', 'file', 'filter', 'float', 'floordiv', 'flush', 'format', 'freevars', 'fspath', 'fstat', 'fstypename', 'ftruncate', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name', 'func_newparty', 'func_newparty', 'func_self', 'functools', 'gc', 'get_doc', 'get_file_type', 'getcwd', 'getdefaultencoding', 'getfilesystemencoding', 'getloadavg', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'import', 'imputil', 'index', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'iterafter', 'iterator', 'join', 'key', 'kwonlyargcount', 'len', 'listdir', 'locals', 'long', 'lookup', 'lseek', 'mac_ver', 'makefuncs', 'manpath', 'makedirs', 'map', 'max', 'maxsize', 'memoryview', 'min', 'mkfifo', 'mkstemp', 'mktime', 'mmap', 'mode', 'module', 'modulefinder', 'msilib', 'multimethods', 'name', 'nbits', 'nbytes', 'new_class', 'next', 'nonlocal', 'not', 'Null', 'numbers', 'object', 'oct', 'open', 'ord', 'os2emxpath', 'oserror', 'ospath', 'pdir', 'pipe', 'popen', 'pop', 'popen2', 'pow', 'preexec_fn', 'print', 'property', 'proxy_new', 'putenv', 'quote', 'quote_from_bytes', 'raise', 'randbytes', 'range', 'raw_input', 'read', 'readlink', 'readlines', 'readline', 're', 'realloc', 'reduce', 'reduce_ex', 'refcount', 'reload', 'repr', 'reset', 'rest', 'reversed', 'rmdir', 'round', 'seek', 'send', 'sep', 'setattr', 'setenv', 'setrecursionlimit', 'singledispatch', 'size', 'slice', 'sorted', 'spawnl', 'spawnle', 'spawnlp', 'spawnlpe', 'spawnv', 'spawnve', 'spawnvp', 'spawnvpe', 'split', 'splitlines', 'sqrt', 'ssencode', 'stderr', 'stdin', 'stdout', 'str', 'strict_typehint', 'StringIO', 'string', 'subclasses', 'super', 'symlink', 'sys', 'sysconfig', 'sysflags', 'sysgetcheckinterval', 'sysgetdefaultencoding', 'sysgetfilesystemencoding', 'sysgetrefcount', 'syslog', 'tarfile', 'tempfile', 'this', 'time', 'times', 'tmpfile', 'tokenize', 'trace', 'truncate', 'try', 'ttyname', 'tuple', 'type', 'typevars', 'unichr', 'unicode', 'uniform', 'unlink', 'unparse', 'unshelve', 'update', 'utime', 'va_arg', 'va_copy', 'va_end', 'va_list', 'va_start', 'vars', 'wait', 'waitpid', 'walk', 'warn', 'warnings', 'where', 'write', 'xreadlines', 'zip']

方法二:使用 Python -c 过滤变量

如果想根据模式过滤变量,可以使用以下命令:

python -c "import os; print [x for x in dir(os) if x.startswith('r')]"

输出结果为:

['read', 'readlink', 'remove', 'removedirs', 'rename', 'renames', 'rmdir']

设你有一个 Python 模块(文件)mymodule.py,内容如下:

# mymodule.py
x = 10
y = 20
z = 30def my_function():pass

要在 Bash 中获取该模块中的所有变量(即非函数、非内置的全局变量),可以使用以下步骤:

方法:使用 dir() 函数结合过滤

  1. 使用 python -c 运行 Python 脚本。
  2. 使用 dir() 获取模块中的所有名称。
  3. 使用 inspect 模块过滤出变量(排除函数、类、模块等)。
示例代码
python -c "
import mymodule
import inspect
variables = [name for name, value in vars(mymodule).items() if not inspect.isbuiltin(value) and not inspect.isfunction(value) and not inspect.ismodule(value) and not inspect.isclass(value)]
print(' '.join(variables))
"
说明
  • vars(mymodule).items():获取模块的所有属性。
  • inspect.isbuiltininspect.isfunctioninspect.ismoduleinspect.isclass:过滤掉内置对象、函数、模块和类,保留纯变量。
  • print(' '.join(variables)):将变量名列表以空格分隔的形式打印出来。

执行结果

在执行上述命令后,输出会是:

x y z

这表示 mymodule 中的三个变量 xyz

扩展

如果需要进一步处理输出内容,可以在 Bash 中将其保存为数组:

variables=($(python -c "
import mymodule
import inspect
variables = [name for name, value in vars(mymodule).items() if not inspect.isbuiltin(value) and not inspect.isfunction(value) and not inspect.ismodule(value) and not inspect.isclass(value)]
print(' '.join(variables))
"))

这样,variables 数组就包含了所有变量名,你可以在 Bash 中进一步使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/5848.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Xserver v1.4.2发布,支持自动重载 nginx 配置

Xserver——优雅、强大的 php 集成开发环境 本次更新为大家带来了更好的用户体验。 🎉 下载依赖组件时,显示进度条,展示下载进度。 🎉 保存站点信息和手动修改 vhost 配置文件之后,自动重载 nginx 配置 &#x1f41e…

记录————封装vue3+element-plus(el-upload)上传图片组件

AI介绍: 显示已上传的图片列表,并提供删除和预览功能。支持上传新的图片,并在上传成功后显示在列表中。 代码的具体步骤如下: 在模板中,使用v-for指令遍历imageUrls数组,显示已上传的图片,并…

ssm060基于SSM的高校共享单车管理系统的设计与实现+vue(论文+源码)_kaic

设计题目:高校共享单车管理系统的设计与实现 摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0…

FastReport将停止 .NET Framework 上的 WebReport 更新

从2024/ 12 /1 日起,Fastreport将停止发布更新和提供对 FastReport.Web (.NET Framework) 的技术支持。该库一直是使用 Online Designer 的许多项目中报告的核心。这些更改意味着 FastReport.Web (Legacy) 库(FastReport.Net包的一部分)将不再…

FPGA高速设计之Aurora64B/66B的应用与不足的修正

FPGA高速设计之Aurora64B/66B的应用与不足的修正 Aurora IP协议的特点 首先基于网上找到的一些资料,来讲述下Aurora高速协议的特点与相关的应用。Aurora 协议在 2002 年由 Xilinx 公司首次提出,是由Xilinx提供的一个开源、免费的链路层串行传输通信协议…

【力扣打卡系列】单调栈

坚持按题型打卡&刷&梳理力扣算法题系列,语言为go,Day20 单调栈 题目描述 解题思路 单调栈 后进先出 记录的数据加在最上面丢掉数据也先从最上面开始 单调性 记录t[i]之前会先把所有小于等于t[i]的数据丢掉,不可能出现上面大下面小的…

一个例子来说明Ada语言的实时性支持

Ada是一种专为工程应用和实时系统设计的编程语言,它提供了丰富的特性来确保程序的实时性和可靠性。下面是一个简化的例子,展示了Ada如何用于编写飞机电子控制器的代码,并说明Ada的实时性是如何保证的。 Ada实时性的关键特性: 任务…

C/C++语言基础--C++模板与元编程系列三(变量模板、constexpr、萃取等…………)

本专栏目的 更新C/C的基础语法,包括C的一些新特性 前言 模板与元编程是C的重要特点,也是难点,本人预计将会更新10期左右进行讲解,这是第三期,讲变量模板、constexpr、萃取等知识;C语言后面也会继续更新知…

基于微信小程序的移动学习平台的设计与实现+ssm(lw+演示+源码+运行)

摘 要 由于APP软件在开发以及运营上面所需成本较高,而用户手机需要安装各种APP软件,因此占用用户过多的手机存储空间,导致用户手机运行缓慢,体验度比较差,进而导致用户会卸载非必要的APP,倒逼管理者必须改…

RAG 系统的分块难题:小型语言模型如何找到最佳断点?

之前我们聊过 RAG 里文档分块 (Chunking) 的挑战,也介绍了 迟分 (Late Chunking) 的概念,它可以在向量化的时候减少上下文信息的丢失。今天,我们来聊聊另一个难题:如何找到最佳的分块断点。 虽然迟分对边界位置不敏感,…

服务器作业2

关闭防火墙 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 配置文件 创建用户nfs-upload [rootlocalhost ~]# useradd -u 210 nfs-upload [rootlocalhost ~]# groupmod -g 210 nfs-upload 创建tom用户 [rootlocalhost ~]# useradd tom 查看to…

Java爱情交友婚恋系统小程序源码

💑【恋爱攻略】交友婚恋系统,遇见对的TA不再难!💖💫 💌 开篇:数字时代,寻觅真爱的新方式 在这个快节奏的数字时代,寻找真爱似乎成了一件既期待又头疼的事情。&#x1f…

飞牛fnOs内网穿透-使用Lucky实现ipv6动态解析+HTTPS访问NAS服务

🧭Lucky官方介绍 Lucky最初是作为一个小工具,由开发者为自己的个人使用而开发,用于替代socat,在小米路由AX6000官方系统上实现公网IPv6转内网IPv4的功能。Lucky的设计始终致力于让更多的Linux嵌入式设备运行,以实现或…

Java外卖霸王餐CPS优惠CPS平台自主发布小程序系统源码

外卖霸王餐CPS平台系统🍽️:省钱吃大餐的新神器 🎉 引言:霸王餐不再是梦 在这个快节奏的生活中,外卖已经成为了我们日常饮食的重要组成部分。然而,每次点外卖都要精打细算,是否让你感到疲惫&a…

Java项目实战II基于Spring Boot的智慧生活商城系统的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着科技的飞速发展,人们的…

qt QFile详解

1、概述 QFile类是Qt框架中用于读取和写入文本和二进制文件资源的I/O工具类。它继承自QFileDevice类,后者又继承自QIODevice类。QFile类提供了一个接口,允许开发者以二进制模式或文本模式对文件进行读写操作。默认情况下,QFile假定文件内容为…

电脑软件:推荐一款免费且实用的电脑开关机小工具

目录 一、软件简介 二、软件功能 三、软件特点 四、使用说明 五、软件下载 今天给大家推荐一款免费且实用的电脑开关机小工具KShutdown,有需要的朋友可以下载试一下! 一、软件简介 KShutdown是一款精巧且实用的定时自动关机小工具,对于…

初阶数据结构【TOP】- 16. 经典八大排序对比

文章目录 前言一、相关复杂度二、相关稳定性三、表格总结总结 前言 本篇文章笔者将会对排序算法的所有时间复杂度和稳定性进行分析. 一、相关复杂度 ● 简单选择排序 首先,选择排序的效率是不高的 , 时间复杂度考虑的是最坏情况 , 那么对于选择排序来说, 最坏情况下需要进行…

Postman断言与依赖接口测试详解!

在接口测试中,断言是不可或缺的一环。它不仅能够自动判断业务逻辑的正确性,还能确保接口的实际功能实现符合预期。Postman作为一款强大的接口测试工具,不仅支持发送HTTP请求和接收响应,还提供了丰富的断言功能,帮助测试…

基于 JAVASSM(Java + Spring + Spring MVC + MyBatis)框架开发一个九宫格日志系统

基于 JAVASSM(Java Spring Spring MVC MyBatis)框架开发一个九宫格日志系统 步骤一:需求分析 明确系统需要实现的功能,比如: 用户注册和登录添加日志(包含标题、内容、图片)查看日志列表…