在Windows Terminal中获取外部python程序的输出

时间:2014-02-23 14:28:31

标签: python windows python-2.7 numpy terminal

我正在运行以下python代码。我希望它会在终端中执行一些外部Python代码并将输出保存在一个numpy数组中,然后我可以附加到另一个numpy数组以添加一个额外的列。它在shell中运行外部python命令;但我找不到一种获取输出的方法,以便我可以将它保存在我的程序中。

以下是代码:

import csv
import GetAlexRanking #External Method exposed here
import subprocess
import pandas as p
import numpy as np

loadData = lambda f: np.genfromtxt(open(f,'r'), delimiter=' ')
with open('train.tsv','rb') as tsvin, open('PageRanks.csv', 'wb') as csvout:
    tsvin = list(np.array(p.read_table('train.tsv'))[:,0])
    csvout = csv.writer(csvout)

    for row in tsvin:
        count = 0
        cmd = subprocess.Popen("python GetAlexRanking.py " + row ,shell=True)
        (output, err) = cmd.communicate()
        exit_code = cmd.wait()
        print exit_code #testing
        print output #**error here**, always prints "none"
        csvout.write(url + "\t" + cmd_string) #writing
        count+=1

如何获取我的“python GetAlexRanking.py”命令输出的内容并将其保存在我的Python代码中的变量中?

感谢。

1 个答案:

答案 0 :(得分:1)

使用stdout=subprocess.PIPE。没有它,子进程将其输出直接打印到终端。

cmd = subprocess.Popen("python GetAlexRanking.py " + row ,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.PIPE,
                       shell=True)
(output, err) = cmd.communicate()