Python执行命令并将结果存储在变量中

Python执行命令并将结果存储在变量中,python,python-2.7,python-3.x,subprocess,Python,Python 2.7,Python 3.x,Subprocess,我想执行shell命令(比如ubuntu的ls-a命令) 现在,在阅读了一些SOF线程之后,我发现子进程模块是最好的。真的是这样吗 from subprocess import call t = call(['ls', '-a']) print t 当我运行这个脚本时,它只是在我的系统终端上打印结果,变量t得到值0 shell=False也不工作;我只是试了一下 如何将结果存储在变量中,而不是将其打印到终端(或者也可以打印到终端,如果无法消除此问题) 我们可以使用其他图书馆吗 编辑: t=os

我想执行shell命令(比如ubuntu的
ls-a
命令)

现在,在阅读了一些SOF线程之后,我发现
子进程
模块是最好的。真的是这样吗

from subprocess import call
t = call(['ls', '-a'])
print t
当我运行这个脚本时,它只是在我的系统终端上打印结果,变量
t
得到值
0

shell=False
也不工作;我只是试了一下

如何将结果存储在变量中,而不是将其打印到终端(或者也可以打印到终端,如果无法消除此问题)

我们可以使用其他图书馆吗

编辑:

t=os.popen('ls-a').read()

这是工作!但是这有什么错误或问题吗?

用于捕获输出

from subprocess import check_output
t = check_output(['ls', '-a'])
print t
请注意,如果
ls
返回非零退出代码,则这将引发
CalledProcessError
异常


至于问题的另一部分,
子流程
模块是在Python中运行子流程的首选(也是最好的,IMO)方式。您应该更喜欢它,而不是
os.popen

在PyPI上有很多第三方库,它们的级别比
子流程
更高,您可能想看看。对于您正在做的事情,您可能不需要他们的任何花哨的东西,但您可能会发现它们在将来很有用。顺便说一下,
0
ls
程序的返回值。每个程序都返回一个小整数作为值,0几乎总是表示成功。正如shell运行程序并存储其返回值的方式不同于运行程序并捕获其输出的方式一样,
子流程
对这两种方式具有不同的功能。虽然这可能会回答问题,但请添加一些注释,说明您正在做什么以及为什么要这样做!如果我使用的是
sudo
,如何传递密码。如果我只写
t=check_output(['sudo','ls','-a'])
,它会要求我输入密码,但有没有办法传入我的程序。
from subprocess import PIPE,Popen
t = Popen(['ls', '-a'],stdout=PIPE)
t = t.communicate()[0]