运行 条件为真时的另一个 .py 文件

run another .py file when condition is true

我是 Python 的新手,正在尝试使用 Python

在 Raspberry Pi2 中制作一个小项目

目前我有 2 个代码文件 run1.pyrun2.py

我想在 Project.py 中编写一个 if-else 条件,但我不确定如何正确编写代码....

if (condition is true) ----> run the code from file "run1.py"
else ----> run the code from file "run2.py"

是关于“__main__”或import os的主题吗?我也在尝试了解它是如何工作的,但还没有真正理解。

谢谢

如果您只想导入其中一个文件,例如因为它们都有一个名为 foo 的函数并且您想在运行时选择其中一个,您可以这样做:

if condition:
    import fileA as file
else:
    import fileB as file
file.foo()

如果你确实需要启动文件(它们是独立的程序),你可以这样做:

import subprocess
if condition:
    subprocess.call(['python', 'fileA.py'])
else:
    subprocess.call(['python', 'fileB.py'])

我会推荐这种方式:

main.py

import first, second
if __name__ == "__main__":
  if foo:
    first.main()
  else:
    second.main()

first.py:

def main():
  do_something()
if __name__ == "__main__":
  main()

second.py(就像first.py)

然后您可以从命令行调用 first.py / second.py 并且他们 运行 他们的代码。如果你导入它们(import first, second)它们什么都不做,但你可以调用它们的(主要)方法,即在你的 if-else-condition 中。

__name__ == "__main__" 部分阻止条件中的代码在从另一个文件导入时变为 运行,而当文件直接从命令行执行时它变为 运行。

if <condition>: 
    run1.py
else:
    run2.py

如果条件为真,则 run1.py 将 运行。否则 run2.py 将 运行。

希望我能回答你的问题。

我认为 runpy 更好,想象一下你有 25 个 类,它们彼此之间有很大的不同。在您的代码中使用 if 条件在 25 个左右创建 25 个 import 语句并不好。

Folder:.
    preA.py
    preB.py
    preC.py
    preD.py
    test.py

您可以使用一个功能来节省您的时间,并保持干净的代码

import runpy

def call_f(filename):

    return runpy.run_path(filename , run_name='__main__')

#Call the function, since we are using run_path we have to specify the extension
#You can also use modules and you should use runpy.run_module
res = call_f('preA.py')

print(res['res'])
#>> 0

预处理文件如下所示:

def preproc():

    print('I am A preprocessing, different from any other type of preprocessing')

    return 0

if __name__ == '__main__':

    res =  preproc()