1

我编写了非常小的脚本并尝试捕获脚本的输出。我曾多次以类似的方式写过,但从未遇到过问题。我可以输入。我认为我犯了一个非常愚蠢的错误

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

4 回答 4

2

您实际上永远不会关闭fp_numpy,因此在您尝试运行它时脚本可能是空的或不完整的。

保证为空,但很有可能。当我在具有 7 个不同版本的 Python 的两台不同的 *nix 计算机上尝试此操作时,每次都是空的……(事实上,在你的脚本完成后,文件被关闭并因此被刷新,这使得问题更难调试。)

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

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

但除此之外,你还有另一个问题。如果生成的脚本引发异常,它将不向 stdout 打印任何内容,并将回溯转储到 stderr,您将阅读并忽略它。当您忽略错误时,很难调试问题......我不知道您传递的是什么xand y,但是如果您传递的是 anumpy.array而不是一个评估为 one 的字符串,您可以轻松获得一个例外,永远不会看到它。要么将标准错误发送到标准输出,要么print "err", err在最后。

最后,你真的不应该shell=True在这里使用命令字符串,因为你最终会无缘无故地获得额外的间接级别,这会使调试变得更加困难。只需这样做:

cmd = ["/remote/Python-2.7.2/bin/python", "numpy_temp.py"]
proc = subprocess.Popen(cmd, stdout = subprocess.PIPE,
                        stderr = subprocess.PIPE)
于 2013-10-17T18:15:29.653 回答
0

print out不使用print "out"

于 2013-10-17T18:09:54.450 回答
0

看看这个方法

见.py

对于范围内的行(6):
    打印线

me@pubx:~$ python see.py > all

于 2013-10-17T18:14:00.860 回答
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
于 2013-10-17T18:15:16.467 回答