我想从python脚本中获取一些shell命令的输出,如ls
或df
。我看到commands.getoutput('ls')
已被弃用,但subprocess.call('ls')
只会获得返回码。
我希望有一些简单的解决方案。
答案 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