2012-07-26 32 views
0

我想在Ubuntu软件中心中为Windows编写一些GUI程序。我使用的几个外部命令行工具,我与在Python和Ubuntu中调用命令行工具

os.system(cmd) 

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

我需要的工具都是生物信息学的,primer3,blast,bowtie

任何帮助非常感谢!

+0

如果在Ubuntu命令行中键入'primer3','blast'或'bowtie',那么'os.system'(或更有能力的'subprocess')将按预期工作。是否有你不想“安装”二进制文件的原因? – Lenna 2012-07-26 17:56:09

+0

用户在不知道的情况下安装多个程序并不是很好,我想。而且我也不知道如何通过Python安装它。我敢肯定不想要求用户另外安装3个工具。有更容易的方法吗? – snowflake 2012-07-26 18:02:59

+3

如果用户想要在Ubuntu上安装生物信息学GUI,他们可能不是命令行工具的用户吗?绝对将它们标记为依赖项,Ubuntu软件中心将通知用户并自动进行安装。 – Lenna 2012-07-26 18:06:37

回答

2

在Linux上,你通常打包的应用程序,使他们能够使用系统软件包管理器进行安装(例如,.deb文件基于Debian的发行版,包括Ubuntu和.rpm红帽)。原因之一(很多)你为什么要这样做是依赖管理 - 你可以告诉你的软件包中的软件包管理器,它依赖于哪些其他软件包,以便它们可以安装,如果它们不是。你可以使用setuptools这样做,这里有很多资源。在这种情况下,您可以期望将命令行工具安装在系统范围内,并且可以从应用程序调用它们。

如果这是不可能的,甚至可以包含所需工具的源代码,并为用户提供如何编译它们(如果需要,在您的应用程序目录中)的说明。对于大多数现代分布来说,这是一个相当无痛的过程,但并不是最佳实践。


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

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

+0

啊,谢谢你把这个词比我想象的要好。 – Lenna 2012-07-26 18:27:11

+0

感谢您的出色答案。你能否告诉我在哪里存储依赖关系创建的输出? – snowflake 2012-07-26 18:42:54