python - tf.app.run() 是如何工作的?

tf.app.run() 如何在 Tensorflow 翻译演示中工作?

tensorflow/models/rnn/translate/translate.py 中,有一个对 tf.app.run() 的调用。它是如何处理的?

if __name__ == "__main__":
    tf.app.run() 

最佳答案

if __name__ == "__main__":

表示当前文件在 shell 下执行,而不是作为模块导入。

tf.app.run()

你可以通过文件app.py

看到
def run(main=None, argv=None):
  """Runs the program with an optional 'main' function and 'argv' list."""
  f = flags.FLAGS

  # Extract the args from the optional `argv` list.
  args = argv[1:] if argv else None

  # Parse the known flags from that list, or from the command
  # line otherwise.
  # pylint: disable=protected-access
  flags_passthrough = f._parse_flags(args=args)
  # pylint: enable=protected-access

  main = main or sys.modules['__main__'].main

  # Call the main function, passing through any arguments
  # to the final program.
  sys.exit(main(sys.argv[:1] + flags_passthrough))

让我们逐行分解:

flags_passthrough = f._parse_flags(args=args)

这确保您通过命令行传递的参数是有效的,例如 python my_model.py --data_dir='...' --max_iteration=10000 其实这个特性是基于python标准的argparse模块实现的。

main = main or sys.modules['__main__'].main

=右侧的第一个main是当前函数run(main=None, argv=None)的第一个参数 .而 sys.modules['__main__'] 表示当前正在运行的文件(例如 my_model.py)。

所以有两种情况:

  1. 你在 my_model.py 中没有 main 函数那么你必须 调用 tf.app.run(my_main_running_function)

  2. 您在 my_model.py 中有一个 main 函数。 (大部分情况都是这样。)

最后一行:

sys.exit(main(sys.argv[:1] + flags_passthrough))

确保您的 main(argv)my_main_running_function(argv) 函数被正确地使用已解析的参数调用。

https://stackoverflow.com/questions/33703624/

相关文章:

linux - 如何使用 shellscript 解析 XML?

python - 如何使用 PIL 将透明 png 图像与另一个图像合并

linux - 递归查找比给定时间更新的所有文件

python - 如何打印状态栏和百分比?

c - 删除当前打印的控制台行

c++ - 在 Linux 中获取主目录

linux - 在 .bashrc 中包含其他文件

python - 为什么我使用 Translate API 的 Python App Engine

python - 在 Python 中重置生成器对象

python - 在代码更改时自动重新加载 python Flask 应用程序