捕获Python脚本输出

时间:2013-10-17 18:07:57

标签: python python-2.7

我编写了非常小的脚本并尝试捕获脚本的输出。我写过多次相似的方式,但从来没有问题。我能输入吗?我觉得我犯的是非常愚蠢的错误

numpy_temp = """
import numpy
import sys
a, b, c = numpy.polyfit(%s,%s, 2)
print a, b, c""" %(x, y)
fp_numpy = open("numpy_temp.py", "w")
fp_numpy.write(numpy_temp)
cmd = "/remote/Python-2.7.2/bin/python numpy_temp.py "
proc = subprocess.Popen(cmd, stdout = subprocess.PIPE,
            stderr = subprocess.PIPE, shell = True)
out, err = proc.communicate()
print "out", out

4 个答案:

答案 0 :(得分:2)

您实际上从未关闭fp_numpy,因此在您尝试运行该脚本时,该脚本可能为空或不完整。

保证不是空的,但它可能 。当我在两个不同的* nix计算机上尝试使用7个不同版本的Python时,它每次都是空的...(事实是,在脚本完成后,文件关闭,因此刷新,使问题更难调试。)< / p>

解决此问题的最佳方法是使用with语句,因此忘记关闭文件是不可能的:

with open("numpy_temp.py", "w") as fp_numpy:
    fp_numpy.write(numpy_temp)

但除此之外,你还有另外一个问题。如果生成的脚本引发异常,它将不会向stdout打印任何内容,并将回溯转储到stderr,您将读取并忽略它。当你忽略错误时调试问题非常困难......我不知道你为xy传递了什么,但是如果你要传递一个{{1}而不是一个计算结果为一的字符串,你可以轻松得到一个异常,永远不会看到它。将stderr发送到stdout,或者最后发送numpy.array

最后,你真的不应该在这里使用命令字符串和print "err", err,因为你没有充分的理由最终得到了额外的间接层,这可以制作事情更难调试。就这样做:

shell=True

答案 1 :(得分:0)

使用print out而不是print "out"

答案 2 :(得分:0)

查看此方法

see.py

for line in range(6):
    print line

me @ pubx:〜$ python see.py&gt;所有

答案 3 :(得分:0)

我不知道你为什么要写一个脚本来捕获脚本的输出(也许你有充分的理由)。使用shell可以更容易地完成这类任务。

创建numpy_temp.py,然后将其输出传输到文件。

/remote/Python-2.7.2/bin/python numpy_temp.py > output.txt

要将数据附加到现有文件,请使用

/remote/Python-2.7.2/bin/python numpy_temp.py >> output.txt