【问题标题】:Call a command line tool in Python & Ubuntu在 Python 和 Ubuntu 中调用命令行工具
【发布时间】:2012-07-25 09:11:14
【问题描述】:

我想把我为 Windows 编写的一些 GUI 程序带到 Ubuntu 软件中心。我正在使用几个外部命令行工具,我用它们调用

os.system(cmd)

不,我想知道如何在 Linux (Ubuntu) 下做到这一点。我必须使用哪个相应的文件?在 Windows 中,该工具只能在我的程序的文件夹中访问,但未安装,它在 Linux 上的工作方式是否相同?

我需要的工具都是生物信息学的,primer3blastbowtie

非常感谢任何帮助!

【问题讨论】:

  • 如果在 Ubuntu 命令行中输入 primer3blastbowtie 有效,那么 os.system(或功能更强大的 subprocess)将按预期工作。您是否有不想“安装”二进制文件的原因?
  • 我想,用户在不知情的情况下安装多个程序并不是一件好事。而且我不知道如何通过 Python 安装它。我绝对不喜欢要求用户另外安装 3 个工具。有没有更简单的方法?
  • 如果用户想在 Ubuntu 上安装您的生物信息学 GUI,他们不会是命令行工具的用户吗?绝对将它们标记为依赖项,Ubuntu 软件中心会通知用户并自动安装它们。
  • 啊,好吧,我不知道。谢谢你!

标签: python ubuntu command-line bioinformatics


【解决方案1】:

在 Linux 上,您通常打包您的应用程序,以便可以使用系统包管理器安装它们(例如,.deb 文件用于基于 Debian 的发行版,包括 Ubuntu,.rpm 用于 RedHat)。您想要执行此操作的一个原因(其中一个)是依赖管理——您可以告诉包中的包管理器它依赖于哪些其他包,以便在不依赖的情况下安装它们。您可以使用 setuptools 来执行此操作,这方面有很多资源。在这种情况下,您可以期望在系统范围内安装命令行工具,并且可以从您的应用程序中调用它们。

如果无法做到这一点,您甚至可以包含所需工具的源代码,并为用户提供如何编译它们的说明(如有必要,在您的应用程序目录中)。对于大多数现代发行版,这是一个相当轻松的过程,但并不是最佳实践。


另一个注意事项:os.system 正在阻塞,它产生一个新进程并等待它退出。您无法轻松获取 stdout 或 stderr 输出或与之交互。您应该查看 subprocess 模块(它是 Python 标准库的一部分)或 envoy(第 3 方模块),它为子进程模块提供了一个简化且(可以说)更强大的接口。

如果您想“自动化”命令行工具,pexpect 让您的生活更轻松。

【讨论】:

  • 啊,谢谢你用比我更好的措辞。
  • 感谢您的出色回答。你能告诉我在哪里存储使用依赖项创建的输出吗?
猜你喜欢
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多