我编写了非常小的脚本并尝试捕获脚本的输出。我写过多次相似的方式,但从来没有问题。我能输入吗?我觉得我犯的是非常愚蠢的错误
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
答案 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,您将读取并忽略它。当你忽略错误时调试问题非常困难......我不知道你为x
和y
传递了什么,但是如果你要传递一个{{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