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

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

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

myscript.py -i输入名称1输入名称2

完成该工作后,我希望脚本“返回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下工作。

ofer.sheffer asked 2020-08-01T12:10:20Z
1个解决方案
92 votes

如果您想让脚本返回值,只需从包装代码的函数中执行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)

然后根据您希望告诉州长的信息,使用特定的退出代码退出。在调度和监视环境下运行脚本时,我使用了退出代码来指示发生了什么。

标准输出作为您的中继

如果不是这样,则必须使用stdout与外界进行通信(如您所描述的)。但这通常是一个坏主意,除非它是一个解析器来执行您的脚本并且可以捕获您要向其报告的内容。

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格式进行操作,以供他人简单阅读。

Torxed answered 2020-08-01T12:12:00Z
translate from https://stackoverflow.com:/questions/18231415/best-way-to-return-a-value-from-a-python-script