Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使一个python文件运行另一个python文件?_Python - Fatal编程技术网

如何使一个python文件运行另一个python文件?

如何使一个python文件运行另一个python文件?,python,Python,如何使一个python文件运行另一个python文件 例如,我有两个.py文件。我希望运行一个文件,然后让它运行另一个.py文件。您可以将其中一个文件视为python模块,并让另一个导入它(就像导入标准python模块一样)。后者可以引用导入模块中定义的对象(包括类和函数)。模块还可以运行它需要的任何初始化代码。请参见有多种方法。我将按倒序排列它们(即,最好的第一,最差的最后): 将其视为一个模块:导入文件。这很好,因为它安全、快速且可维护。代码按照预期的方式被重用。大多数Python库使用多个

如何使一个python文件运行另一个python文件


例如,我有两个.py文件。我希望运行一个文件,然后让它运行另一个.py文件。

您可以将其中一个文件视为python模块,并让另一个导入它(就像导入标准python模块一样)。后者可以引用导入模块中定义的对象(包括类和函数)。模块还可以运行它需要的任何初始化代码。请参见

有多种方法。我将按倒序排列它们(即,最好的第一,最差的最后):

  • 将其视为一个模块:
    导入文件
    。这很好,因为它安全、快速且可维护。代码按照预期的方式被重用。大多数Python库使用多个方法运行,这些方法覆盖了大量文件。强烈推荐。请注意,如果文件名为
    file.py
    ,则导入的
    文件不应在末尾包含
    .py
    扩展名
  • 臭名昭著的(且不安全的)命令:不安全的、黑客式的,通常是错误的答案。尽可能避免。
    • Python 2中的execfile('file.py')
    • Python3中的exec(open('file.py').read())
  • 生成一个shell进程:
    os.system('python file.py')
    。绝望时使用
  • 使用python 2.7.3和Ubuntu 12.10获取一个python文件以运行另一个:
  • 将其放在main.py中:

    #!/usr/bin/python
    import yoursubfile
    
  • 把这个放到你的subfile.py中

    #!/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"])