Python 执行命令并将结果存储在变量中
我想执行一些命令行指令(比如在ubuntu系统上用的 ls -a
命令)。
在看了一些StackOverflow的讨论后,我发现 subprocess
模块是最好的选择。这真的是这样吗?
from subprocess import call
t = call(['ls', '-a'])
print t
当我运行这个脚本时,它只是把结果打印到了我电脑的终端上,而变量 t
得到了值 0
。
shell=False
也没有效果;我只是试了一下。
我怎么才能把结果存储到一个变量里,而不是直接打印到终端上呢(如果不能完全去掉打印到终端的功能,那也可以同时打印)?
我们可以用其他库来实现这个功能吗?
补充:
t = os.popen('ls -a').read()
这个方法有效!但这样做会有bug或者其他问题吗?
2 个回答
在编程中,有时候我们需要让程序在特定的条件下执行一些操作。比如说,当某个条件满足时,我们希望程序能够自动运行某段代码。这种情况通常会用到“条件语句”。
条件语句就像是一个判断的开关,它会根据你设定的条件来决定接下来要做什么。如果条件成立,程序就会执行你指定的代码;如果条件不成立,程序则会跳过这段代码,继续执行后面的内容。
举个简单的例子:想象一下你在做饭,只有当水烧开了,你才会放入面条。如果水没有烧开,你就会等着。这就是条件判断的一个实际应用。
在编程中,条件语句通常用“if”来表示。你可以在“if”后面写上你想要判断的条件,然后在大括号里写上当条件满足时要执行的代码。
总之,条件语句帮助程序根据不同的情况做出不同的反应,就像我们在生活中根据情况做出不同的决定一样。
from subprocess import PIPE,Popen
t = Popen(['ls', '-a'],stdout=PIPE)
t = t.communicate()[0]
使用 subprocess.check_output
可以捕获输出结果。
from subprocess import check_output
t = check_output(['ls', '-a'])
print t
需要注意的是,如果 ls
命令返回一个非零的退出代码,这会引发一个 CalledProcessError
错误。
至于你问题的另一部分,subprocess
模块是运行子进程的推荐方式(我觉得是最好的)。你应该优先使用它,而不是 os.popen
。