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

我用 python 编写了一个脚本,它接受几个文件,运行几个测试并计算 total _ bug 的数量,同时编写包含每个 bug (bug + more)信息的新文件。

从当前工作目录中提取一些文件:

Py-i input _ name1 input _ name2

当这项工作完成后,我希望脚本能够“返回 total _ bug”,但是我不确定实现它的最佳方式。

目前,脚本打印的内容包括:

[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。

183698 次浏览

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

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

(os._exit(100)也可以,而且更有力一些)

Stdout 作为你的中继站

如果不是这样的话,那么您就必须使用 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 格式,以便其他人简单地阅读。

作为传送带的插座

如果上面的方法都不起作用,那么您也可以在本地使用网络套接字 * (unix 套接字是 Nix 系统)上的一种很好的方法。这些问题有点复杂,应该有自己的回复。但是在这里添加编辑,因为这是进程之间通信的一个很好的选择。特别是当它们应该运行多个任务并返回值时。