Python内联linux命令

时间:2014-06-06 01:34:09

标签: python linux command subprocess

我正在测试排序算法,因此我想在我的Python代码,linux命令" time"中进行编译,因为它需要一些有趣的参数,例如quicksort的调用。

from subprocess import Popen
import quicksort
import rand

time=Popen("time quicksort.main(rand.main())")

这完全是错的,但它是我设法得到的最接近的。我还没有掌握subprocess类的想法,是否可以将方法调用与linux命令结合起来,或者只在python中添加命令,例如" grep ..."并将输出发送到变量??

1 个答案:

答案 0 :(得分:1)

如果你在子流程中使用Popen,你需要做很多不同的事情。

我相信你要找的是check_output,属于子进程模块的另一个函数。

但是为了进一步理解你,因为你很接近,所以你需要改变它才能让它发挥作用:

命令字符串"time quicksort.main(rand.main())"对于bash并不意味着什么。那是python。但是在它是有效的bash语言的情况下,它需要在单词边界上分割(就像bash WOULD通常那样),所以你可以把它变成一个列表:

['time', '...','...']

你可以通过Popen命令STRING(不是列表)的唯一一次是你在Popen的关键字中设置shell = True。

但是,让我们把shell保留为False,为bash做一些分词,并传入一个列表。到下一部分。

Popen会返回您可以与之交流的内容。不是过程的结果'标准输出。将stprocess和stdout关键字的subprocess.PIPE用于Popen。

一旦你按照描述制作了一个Popen对象,就可以调用它的通信方法。

结果是两件事,stdout和stderr。

你是在第一个之后。 Popen的一个用例是当你需要保持错误和输出分开的时候。显然,这并不是内联的最佳选择,但是哦。让我们处理stdout。

sdtout可能需要解码:

stdout.decode()

或者甚至可能还删除了新行:

stdout.decode().rstrip()

正如您所看到的,Popen不符合您的用例。没有必要使用子进程并进行系统调用以便为python定时。查看timeit