检查Python脚本中的程序是否存在[重复]

2024-02-15

如何从 python 脚本检查程序是否存在?

假设您想检查是否wget or curl可用。我们假设它们应该在路径中。

最好能看到多平台解决方案,但目前 Linux 就足够了。

Hints:

  • 运行命令并检查返回代码并不总是足够的,因为即使您尝试,某些工具也会返回非 0 结果--version.
  • 检查命令时屏幕上不应显示任何内容

另外,我希望有一个更通用的解决方案,例如is_tool(name)


关闭

让我推荐一个尚未讨论过的选项:Python 实现which, 具体来说shutil.which https://docs.python.org/3/library/shutil.html#shutil.which。它在Python 3.3中引入,是跨平台的,支持Linux、Mac和Windows。它也可以在 Python 2.x 中通过哪个工艺 https://pypi.python.org/pypi/whichcraft。你也可以直接撕下代码which就在巫术之外here https://github.com/pydanny/whichcraft/blob/master/whichcraft.py#L20并将其插入到您的程序中。

def is_tool(name):
    """Check whether `name` is on PATH and marked as executable."""

    # from whichcraft import which
    from shutil import which

    return which(name) is not None

distutils.spawn.find_executable

已经提到的另一个选项是distutils.spawn.find_executable.

find_executable的文档字符串如下:

尝试在“路径”列出的目录中查找“可执行文件”

因此,如果您注意的话,您会注意到该函数的名称有些误导。不像which, find_executable实际上并没有验证executable被标记为可执行文件,只是它位于 PATH 上。所以完全有可能(尽管不太可能)find_executable表示某个程序可用,而该程序不可用。

例如,假设您有一个文件/usr/bin/wget未标记为可执行文件。跑步wget从 shell 中将导致以下错误:bash: /usr/bin/wget: 权限被拒绝. which('wget') is not None将返回 False,但是find_executable('wget') is not None将返回 True。您可能可以使用任一功能,但这只是需要注意的事情find_executable.

def is_tool(name):
    """Check whether `name` is on PATH."""

    from distutils.spawn import find_executable

    return find_executable(name) is not None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查Python脚本中的程序是否存在[重复] 的相关文章

随机推荐

  • 强制变量仅保存某些值

    我正在使用 vs 2012 我有一个简单的字符串属性 string someString public string MyString get return someString 我希望该属性仅保留某些值 这样 当客户端使用此属性时 只能使
  • Amazon SimpleDB 用于开发环境/本地安装

    有没有一种方法 工具可以模拟Amazon的SimpleDB以进行开发 在我的上述探索中 我发现这个工具 http mac wareseeker com Tools simpledb dev 0 1 5 zip 3000833但这是针对 Ma
  • 通过内联汇编操作c变量[重复]

    这个问题在这里已经有答案了 可能的重复 如何访问 c 变量以进行内联汇编操作 https stackoverflow com questions 14617953 how to access c variable for inline as
  • .net core build 生成本地化文件夹

    我有一个使用 net core 2 0 的 web asp net 解决方案 我正在使用以下命令构建它 dotnet publish MySolution sln configuration release output d test ou
  • `new_root.mainloop()` 不会使主窗口无响应

    假设我有这个 tkinter 脚本 import tkinter as tk def callback new root tk Tk new root mainloop print Done root tk Tk button tk But
  • 由于“仅允许安全来源”而无法使用 navigator.geolocation

    自从我使用以下命令创建网站以来 控制台中出现错误navigator geolocation getCurrentPosition 以下 我意识到这会在未来的某个时候引起问题 而且由于我只玩网络开发 所以我并没有太担心 但它现在已经完全搞砸了
  • 无法与 WPA2 android 连接

    我正在使用以下代码与 Android 中的 WPA2 连接 我可以与 WEP 和 WPA 连接 但我只获得 扫描 状态 我无法连接 WPA2 网络 你能告诉我需要进行哪些更改才能使此代码与 wpa2 WiFi 相关吗 private boo
  • SQLite3如何使用索引?

    我正在研究 SQLite3 索引 这是一个表 COMPANY CREATE TABLE COMPANY ID INT PRIMARY KEY NOT NULL NAME TEXT NOT NULL AGE INT NOT NULL ADDR
  • 如何在软件中将两个物理串行端口相互桥接(并记录穿过的数据)?

    基本上 我想将我的计算机放在串行线中间并记录通过它的对话 我正在尝试对这段对话进行逆向工程 并最终模拟对话的一端 我正在尝试做的事情的粗略图 通常 我有这个 Device 1 lt gt Device 2 我想做这个 Device 1 lt
  • 如何为 API 客户端提供端点的最新验证规则?

    在我们的 API 中 我们希望实现允许客户端提取验证规则的解决方案 同步验证规则和 您的密码应该是 8 100 个符号 等字段下的任何有用文本将很有用 例如 当客户端请求注册验证规则时 API 使用以下 JSON 进行响应 email ht
  • 未找到具有有效 http:// 前缀的活动(浏览器)

    所以我的应用程序出现了异常 如下所示 android content ActivityNotFoundException No Activity found to handle Intent act android intent actio
  • 在 web.config 中设置要加载的 DLL 的位置

    是否可以在 web config 中设置要加载的特定 DLL 的本地文件路径位置 而不是将这些 DLL 放在 GAC 中或C Windows System32 这将使部署 Web 服务变得更加容易 而不必搞乱其中任何一个 我已经尝试将 DL
  • 有什么方法可以为函数指针比较生成警告吗?

    我花了很长时间才发现我的代码中有一个错误被触发 OPT ICF Because OPT ICF 可以导致相同的地址被分配给不同的函数或只读数据成员 使用 Gy 编译的 const 变量 它可能会破坏依赖于函数或只读数据成员的唯一地址的程序
  • Git 挂钩脚本可以与存储库一起管理吗?

    我们想要制作一些我们都可以共享的基本钩子脚本 用于预格式化提交消息之类的事情 Git 有钩子脚本 通常存储在
  • Xcode 6 链接器错误 - 架构 armv7 的未定义符号

    升级到 Xcode 6 beta 7 现在仍然使用 Xcode 6 GM 后 我无法链接我的 Swift 应用程序 我收到如下错误 架构armv7的未定义符号 swift stdlib compareNSStringDeterministi
  • 回收位图

    我正在从事涉及位图操作的项目 因为我不想出现 OutofMemoryError 所以我尝试回收每个未使用的位图 不幸的是 我回收了太多并且出现了 尝试使用回收的位图 错误 我在用 Bitmap createBitmap bmp x y w
  • 如何检查设备是否已加入 AD 或 Azure AD 加入/注册?

    我需要检查我的设备是否已加入本地域或 Azure AD 加入 注册 如何检查这个 我试过NetGetJoin信息 https learn microsoft com en us windows desktop api lmjoin nf l
  • 如何跨面或网格绘制 geom_line [重复]

    这个问题在这里已经有答案了 我的数据 Plate Month Day Concentration A April 1 17 1094 B April 2 16 001 C April 3 17 9501 D April 4 18 3686
  • 当 NSPasteboard 添加内容时收到通知

    在我的应用程序中 如果 NSPasteboard 中添加了某些内容 我希望收到通知 如果我从任何其他程序复制文本 我希望我的应用程序知道它 我在某处读到 不能那样做 我应该创建一个计时器并自己检查 NSPasteboard 的内容 这是要做
  • 检查Python脚本中的程序是否存在[重复]

    这个问题在这里已经有答案了 如何从 python 脚本检查程序是否存在 假设您想检查是否wget or curl可用 我们假设它们应该在路径中 最好能看到多平台解决方案 但目前 Linux 就足够了 Hints 运行命令并检查返回代码并不总