我正在运行以下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代码中的变量中?
感谢。
答案 0 :(得分:1)
使用stdout=subprocess.PIPE
。没有它,子进程将其输出直接打印到终端。
cmd = subprocess.Popen("python GetAlexRanking.py " + row ,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True)
(output, err) = cmd.communicate()