使用模块从python执行OS命令

时间:2016-07-25 13:59:24

标签: python scripting

我想运行一个可以执行OS(linux)命令的python脚本,我有几个模块可以帮助我像os,subprocess那样做。在OS模块中,我无法将输出重定向到变量。在subprocess.popen中,我无法在参数中使用变量。需要有人帮助找到替代方案。

我试图从python脚本运行一些操作系统命令。例如df -h输出。通过使用os或subprocess等模块可以正常工作。但是我无法将这些输出存储到任何变量中。

此处无法将此输出保存到变量中。如何将其保存到变量中。

我看到了其他多个选项,比如subprocess.Popen但是没有得到正确的输出。

在程序下面我使用了子进程模块但是这里有另一个问题,因为命令很大,我无法在subprocess.Popen中使用变量。

2 个答案:

答案 0 :(得分:0)

您可以使用check_output方法import subprocess output = subprocess.check_output("your command", shell=True)

{{1}}

请参阅此前回答的问题以获取更多信息:https://stackoverflow.com/a/8659333/3264217

另外有关check_output的更多信息,请参阅此处的python文档: https://docs.python.org/3/library/subprocess.html#subprocess.check_output

答案 1 :(得分:0)

使用子进程或pexpect,具体取决于您的确切用例。

子进程可以执行os.system所做的事情以及更多。如果你需要启动一些命令,等待它退出然后获得输出,子进程可以这样做:

import subprocess
res = subprocess.check_output('ls -l')

但是如果你需要与一些命令行实用程序进行交互,那就是重复读/写,那么看一下pexpect模块。它是为Unix系统编写的,但是如果你想要跨平台,那么有一个名为winpexpect的Windows端口。

spawn的'before'属性可能就是你所需要的:

p = pexpect.spawn('/bin/ls')
p.expect(pexpect.EOF)
print p.before

(参见docs