如何使一个python文件运行另一个python文件?
如何使一个python文件运行另一个python文件如何使一个python文件运行另一个python文件?,python,Python,如何使一个python文件运行另一个python文件 例如,我有两个.py文件。我希望运行一个文件,然后让它运行另一个.py文件。您可以将其中一个文件视为python模块,并让另一个导入它(就像导入标准python模块一样)。后者可以引用导入模块中定义的对象(包括类和函数)。模块还可以运行它需要的任何初始化代码。请参见有多种方法。我将按倒序排列它们(即,最好的第一,最差的最后): 将其视为一个模块:导入文件。这很好,因为它安全、快速且可维护。代码按照预期的方式被重用。大多数Python库使用多个
例如,我有两个.py文件。我希望运行一个文件,然后让它运行另一个.py文件。您可以将其中一个文件视为python模块,并让另一个导入它(就像导入标准python模块一样)。后者可以引用导入模块中定义的对象(包括类和函数)。模块还可以运行它需要的任何初始化代码。请参见有多种方法。我将按倒序排列它们(即,最好的第一,最差的最后):
导入文件
。这很好,因为它安全、快速且可维护。代码按照预期的方式被重用。大多数Python库使用多个方法运行,这些方法覆盖了大量文件。强烈推荐。请注意,如果文件名为file.py
,则导入的文件不应在末尾包含.py
扩展名
- Python 2中的execfile('file.py')
- Python3中的exec(open('file.py').read())
os.system('python file.py')
。绝望时使用#!/usr/bin/python
import yoursubfile
#!/usr/bin/python
print("hello")
python main.py
hello
main.py
运行yoursubfile.py
回答这个问题有8种方法,这里有一个更规范的答案:- 您只需使用以下代码即可运行.py文件:
注:
将该文件放在主python文件的同一目录中。您可以使用以下脚本:
def run(runfile):
with open(runfile,"r") as rnf:
exec(rnf.read())
语法:
run("file.py")
它可以从主脚本中调用
abc.py
,如下所示:
#!/usr/bin/python
import abc
abc.py
可能是这样的:
print'abc'
或者我使用了subprocess.call,它几乎和subprocess.Popen一样
from subprocess import call
call(["python", "your_file.py"])
同样,模块通常更好。只需在案例1中添加一点细节:假设您想将fileB.py导入fileA.py。假设文件位于同一目录中,则在fileA中您将写入
import fileB
。然后,在fileA中,您可以调用fileB中的任何函数,如下所示:fileB.name\u of\u your\u func()
。当然还有更多的选项和详细信息,但这会让您启动并运行。使用子流程
模块而不是os
模块使用导入将名称空间添加到函数中,例如,function()变为filename.function()。要避免这种情况,请使用“从名称导入*”。这也将运行代码体。使用os.system()运行将不会保留已定义的函数(因为它是在另一个进程中运行的)。在Python 3中,execfile是exec(),它不起作用。execfile
起作用:DI感兴趣的是如何使用“import()”定义另一个.py脚本的参数,请确保我们在导入的Python脚本文件名中不使用“.”(点)而不是“import subfile.py”只是“import subfile”尽管文件名是subfile.pyOh,请去掉分号。作为一个正在恢复的C/C++程序员,这伤害了我的眼睛!如何将参数传递给yoursubile.py?@AgnelVishal要将命令行参数传递给脚本,您可以编辑sys.argv列表。请为您的答案添加解释。获取“NameError:name'python'未定义”@Tahlor将python.exe目录添加到环境中的PATH变量中Variables@Tahlor,add shell=True如果消息传递中存在无限循环,我如何中断程序的执行?这会产生另一个进程吗?并不总是有效-1@CristiFati什么时候不工作?@Moondra是的,这个方法确实会产生另一个进程,至少在Windows上是这样。另一方面,导入该文件并不需要。[通过在cmd中运行tasklist | findstr“python”
对其进行测试]这背后的逻辑是什么?超晚响应,但它基本上需要一个文件(变量runfile),打开它,读取它的内容。(在rnf.read()函数中读取内容)然后这些内容作为python代码执行,因此调用exec()。可以找到有关exec的信息,但以这种方式而不是简单地按exec(“file.py”)
per执行的逻辑是什么?我认为行:aa1
是毫无意义的,文件在导入时运行,正如我所寻找的。所有其他答案“import secondary exec(open('secondary.py').read())os.system('python secondary.py')call([“python”,“secondary.py”])”都不允许同时创建辅助python文件的多个实例。它们都等待执行完成,然后您才能再次调用该文件。只有Popen允许多个异步调用。再次感谢。如果filename.py
中有def func1()
,那么如何仅在Popen('python filename.py')
方法下运行此特定函数?
from subprocess import Popen
Popen('python filename.py')
from subprocess import call
call(["python", "your_file.py"])