【问题标题】:How to start a python file from another python file如何从另一个 python 文件启动一个 python 文件
【发布时间】:2020-03-16 02:27:57
【问题描述】:

我开发了一个执行某些操作的 python 3.6.6 控制台应用程序。这是我在这个 app.py 文件中使用的结构:

#!/usr/bin/python3

import threading
import time

# My app content
if __name__ == '__main__':
    # all may code is in here

现在我需要在执行其他操作的父应用中调用同一个应用。我在 parent_app.py 文件中放了什么:

#!/usr/bin/python3

#some imports...

#the call to the app.py, but how since app.py hasn't got functions in it???

感谢您对这个基本问题的帮助...如您所见,我是 Python 新手 ;-)

【问题讨论】:

标签: python python-3.x


【解决方案1】:

无论如何,将所有内容都放在 if 语句中是个坏主意,至少,请将其中的所有内容放入一个函数中,并从 if 语句中调用该函数。

# My app content
def func():
    # all may code is now in here   

if __name__ == '__main__':
    func()

现在你有了一个可以导入的函数!但实际上,您应该开始考虑将代码拆分为多个函数和代码结构

【讨论】:

  • 你可能应该添加如何使用模块中的功能(import module_namemodule_name.func()等)
  • @DerteTrdelnik - 我本来打算这样做,但操作的第二个 sn-p 似乎让我清楚地知道他们已经知道如何导入函数。
【解决方案2】:

只需使用import 功能和文件名

from app import *

这里的* 表示文件中的所有内容都已导入。

如果您只想从 python 文件中导入一个函数或类,请考虑这样做

from app import function_name

from app import class_name

【讨论】:

    【解决方案3】:

    也许您还想研究创建一个类!

    app.py:

    class Example(parameters): //insert code here

    父.py:

    from app import Example //use (instantiate) the class

    【讨论】:

      【解决方案4】:

      main 中定义一个名为main 的函数或任何你喜欢的函数

      def main():
        ## TODO
      
      if __name__ == '__main__':
        ## Encapsulate all your code inside this main function
        main()
      

      parent_app.py中,可以导入app.py,调用函数main如下:

      import app
      app.main()
      

      【讨论】:

        【解决方案5】:

        有三种方法可以做到这一点-

        1. 您可以在父文件中导入文件。

          导入应用

        2. 使用 exec 函数。

          exec('app.py')

        3. 使用 os.system(filename)

          导入操作系统

          os.system('app.py')

        【讨论】:

          【解决方案6】:

          parent_app.py

          #-*- coding:utf-8 -*-
          
          from script_to_load import app_function,call_method
          
          #if you just wanted app_functions
          app_function()
          #if you wanted to be script get executed as it is going to execute on app.py run 
          call_method()
          

          app.py

          #-*- coding:utf-8 -*-
          
          def app_method():
              #do somthing
          
          def call_method():
              app_method()
              print("not with if __name__ == '__main__ '")
          if __name__ == "__main__":
              app_method()   
              print("with if __name__ == '__main__'")
          

          众所周知,Python 中的每个模块都有一个特殊的属性,称为 name。当模块作为主程序运行时,name 属性的值设置为 'ma​​in'。否则,name 的值将设置为包含模块的名称。 我希望它对你有用

          【讨论】:

          • 感谢您对 if _name_ == "_main_": 工作原理的解释。我想知道这段代码的原因......所以我猜如果应用程序被称为 script 或作为其他应用程序的 module 调用,您可能会有不同的行为。 .
          猜你喜欢
          • 1970-01-01
          • 2020-10-12
          • 1970-01-01
          • 2017-01-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-03
          • 2015-07-31
          相关资源
          最近更新 更多