我想执行shell命令(假设是ubuntu' s ls -a
命令)
现在,在阅读了几个SOF主题之后,我发现subprocess
模块是最好的。那是真的吗?
from subprocess import call
t = call(['ls', '-a'])
print t
当我运行此脚本时,它只是在我的系统终端上打印结果,变量t
得到值0
。
shell=False
也无效;我试了一下。
如何将结果存储在变量中而不是将其打印到终端(如果无法摆脱这种情况,也可以将其存储到终端中)?
我们可以为此目的使用任何其他库吗?
编辑:
t = os.popen('ls -a').read()
这很有效!但是有没有错误,或者有什么问题吗?
答案 0 :(得分:2)
使用subprocess.check_output
捕获输出。
from subprocess import check_output
t = check_output(['ls', '-a'])
print t
请注意,如果CalledProcessError
返回非零退出代码,则会引发ls
异常。
至于问题的其他部分,subprocess
模块是在Python中运行子流程的首选(也是最好的,IMO)方式。你应该优先于os.popen
。
答案 1 :(得分:0)
from subprocess import PIPE,Popen
t = Popen(['ls', '-a'],stdout=PIPE)
t = t.communicate()[0]