73

我在 python 中编写了一个脚本,它需要一些文件,运行一些测试并计算 total_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。

4

1 回答 1

129

如果您希望您的脚本返回值,只需return [1,2,3]从包装您的代码的函数中执行,但是您必须从另一个脚本导入您的脚本才能使用该信息:

返回值(来自包装函数)

(同样,这必须由单独的 Python 脚本运行并导入才能发挥作用):

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

退出代码作为指标

(这通常只适用于当您想向州长指示出了什么问题或只是计数的错误/行数或 w/e 时。通常 0 是一个好的退出,>=1 是一个不好的退出,但你可以inter - 以任何你想从中获取数据的方式对它们进行评估)

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

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

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

插座作为传送带

如果以上都不起作用,您还可以在本地使用网络套接字 *(unix 套接字是nix 系统上的好方法)。这些有点复杂,应该有自己的帖子/答案。但是在此处编辑以添加它,因为它是在进程之间进行通信的好选择。特别是如果他们应该运行多个任务并返回值。

于 2013-08-14T12:14:18.390 回答