从python脚本返回值的最佳方法

时间:2013-08-14 12:11:47

标签: python return return-value

我在python中编写了一个脚本,该脚本需要一些文件,运行一些测试并计算total_bugs的数量,同时编写包含每个文件的新文件(错误+更多)。

从当前工作目录中获取几个文件:

  

myscript.py -i input_name1 input_name2

当这项工作完成后,我希望脚本能够“返回total_bugs”,但我不确定实现此目的的最佳方法。

目前,该脚本打印的内容如下:

[working directory]
[files being opened]
[completed work for file a + num_of_bugs_for_a]
[completed work for file b + num_of_bugs_for_b]
...
[work complete]

这里的一些帮助(注释/提示/代码示例)可能会有所帮助。

顺便说一句,这需要适用于windows和unix。

1 个答案:

答案 0 :(得分:83)

如果您希望脚本返回值,只需从包含代码的函数执行return [1,2,3],然后您必须从其他脚本导入脚本甚至可以使用该信息:

返回值(来自包装函数)

(同样,这必须由一个单独的Python脚本运行并导入以便做任何好处):

import ...
def main():
    # calculate stuff
    return [1,2,3]

退出代码作为指标

(这通常只适用于你想向州长指出出了什么问题,或者只是计算了错误/行的数量或w / e。通常0是一个很好的退出而且> = 1是一个不好的退出但你可以用任何你希望从中获取数据的方式来填充它们。)

import sys
# calculate and stuff
sys.exit(100)

并使用特定退出代码退出,具体取决于您希望告诉您的州长。 我通过调度和监视环境运行脚本时使用退出代码来指示发生了什么。

标准输出

如果不是,您必须使用标准输出与外界沟通(如您所述)。 但这通常是一个坏主意,除非它是一个执行你的脚本的解析器,并且可以捕获你报告的任何内容。

import sys
# calculate stuff
sys.stdout.write('Bugs: 5|Other: 10\n')
sys.stdout.flush()
sys.exit(0)

您是否在受控制的调度环境中运行脚本,然后退出代码是最好的方法。

作为传送带的文件

还可以选择简单地将信息写入文件,并将结果存储在那里。

# calculate
with open('finish.txt', 'wb') as fh:
    fh.write(str(5)+'\n')

从那里拿起价值/结果。你甚至可以用CSV格式让其他人简单地阅读。