【问题标题】:Can you return a value from a main() function in Python?你能从 Python 中的 main() 函数返回一个值吗?
【发布时间】:2018-08-23 11:17:44
【问题描述】:

假设我有一个实用程序脚本:

utility.py

def func1(input):
    # do stuff to input
    return stuff

def func2(input):
    # do more stuff to input
    return more_stuff

def main(argv):
    stuff = func1(argv[1])
    more_stuff = func2(argv[1])
    all_stuff = stuff + more_stuff
    # write all_stuff to stdout or file

if __name__ == "__main__":
    main(argv)

这个脚本被另一个汇总脚本调用,像这样:

rollup.py

import utility

def main(argv):
    # assuming a list of of inputs is in argv[1]
    inputs = argv[1]
    for input in inputs:
        utility.main(['utility.py', input])

if __name__ == "__main__":
    main(argv)

现在假设我希望汇总脚本打印或写入文件每个实用程序.py 实例生成的所有内容的组合输出

有没有办法通过将实用程序.py 的输出返回到汇总脚本来做到这一点? 或者汇总脚本是否必须读取实用程序.py 生成的所有输出或输出文件?

请注意,我不是询问这是否被认为是最佳实践,或者它是否在编程界“允许”。我知道 main 应该只返回成功或失败代码。我只是在问它是否可能。

【问题讨论】:

  • 使用subprocess.Popen 并从rollup 捕获utility 的输出。

标签: python import return main


【解决方案1】:

这是可能的。例如,您可以在 utility.main() 中返回一个字典(或列表、元组或其他),然后 grub 所有字典并将它们存储在 rollup.main() 的列表中,在 for 循环内,以供进一步阐述.

在这种情况下,您的 utility.main() 只不过是一个正常功能。

【讨论】:

    【解决方案2】:

    在您的代码中,main 函数只不过是一个名为 main 的常规函数​​。因此,如果您问是否可以在您的main 函数中使用return,那么绝对可以。你当然可以

    【讨论】:

    • 如果我在utility.pymain 函数中添加了return 语句,我还能从命令行单独调用utility.py 吗?
    • @RetroDad 没有什么让我觉得这是不可能的。
    • 是的,你可以。返回值只会丢失。如果您想从脚本中实际返回错误代码,最好的方法是使用sys.exit
    • 顺便说一句,我知道这很明显,但是为此设置测试用例的工作量很小。自己试试看:)
    • @Fred Duly 指出。也许更好的问题是“如果 x,返回值会发生什么?”,上面已经回答了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 2010-12-02
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 2013-02-17
    相关资源
    最近更新 更多