gpt4 book ai didi

Python 内联 linux 命令

转载 作者:太空宇宙 更新时间:2023-11-04 11:08:59 25 4
gpt4 key购买 nike

我正在测试排序算法,因此我想在我的 Python 代码中编写 linux 命令“time”,因为它需要一些有趣的参数,例如快速排序的调用。

from subprocess import Popen
import quicksort
import rand

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

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

最佳答案

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

我相信你正在寻找的是 check_output,另一个属于 subprocess 模块的函数。

但是为了加深您的理解,因为您有点接近,所以您需要进行以下更改才能使其正常工作:

命令字符串 "time quicksort.main(rand.main())" 对 bash 没有任何意义。那就是 python 。但是在它是有效的 bash 语言的情况下,它需要在单词边界上进行拆分(就像 bash 通常会做的那样),因此您可以将其放入列表中:

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

唯一可以向 Popen 传递命令字符串(不是列表)的情况是在 Popen 的关键字中设置 shell=True 时。

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

Popen 返回一些你可以交流的东西。不是进程标准输出的结果。将 subprocess.PIPE 用于 stdin 和 stdout 关键字以打开。

按照描述创建 Popen 对象后,您可以调用它的通信方法。

结果是两件事,stdout 和 stderr。

您正在寻找第一个。 Popen 的一个用例是当您需要将错误和输出分开时。显然,这并不是 inline 的最佳选择,但是哦,好吧。让我们处理标准输出。

sdtout 可能需要解码:

stdout.decode()

或者甚至可以删除换行符:

stdout.decode().rstrip()

如您所见,Popen 不适合您所想的用例。不需要使用子进程和进行系统调用来为 python 计时。查看 timeit

关于Python 内联 linux 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24072841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com