python getoutput()在子进程中等效

时间:2011-07-11 22:59:06

标签: python shell command subprocess

我想从python脚本中获取一些shell命令的输出,如lsdf。我看到commands.getoutput('ls')已被弃用,但subprocess.call('ls')只会获得返回码。

我希望有一些简单的解决方案。

3 个答案:

答案 0 :(得分:79)

使用 subprocess.Popen

import subprocess
process = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE)
out, err = process.communicate()
print(out)

请注意,在进程终止之前进行通信阻塞。如果输出在终止之前需要输出,则可以使用 process.stdout.readline()。有关详细信息,请参阅documentation

答案 1 :(得分:46)

对于Python> = 2.7,请使用subprocess.check_output()

http://docs.python.org/2/library/subprocess.html#subprocess.check_output

答案 2 :(得分:3)

要捕获using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication3 { enum Equation { A, B, C } class Result { public readonly Equation Equation; public readonly double Value; public Result(Equation equation, double value) { Equation = equation; Value = value; } } class Program { static void Main(string[] args) { var results = GetGroupedResults(); } static ILookup<Equation, Result> GetGroupedResults() { return GetResults().ToLookup(x => x.Equation); } static List<Result> GetResults() { return new List<Result>(); } } } 的错误,可以使用subprocess.check_output()。如果要将输出用作字符串,请从字节码中对其进行解码。

CalledProcessError