Python中类似于R语言中source()函数的等效方法

21

就像在R Studio中我们有source()函数来执行另一个R程序中的R程序一样,我该如何在一个Python程序中执行另一个Python程序?


这个问题提供了一个相关的方法:Python 3中execfile的替代方法是什么? - divibisan
2个回答

8
给定两个Python脚本:first.pysecond.py,从第二个脚本执行第一个脚本的常规方法大致如下:

first.py:

def func1():
    print 'inside func1 in first.py'

if __name__ == '__main__':
    # first.py executed as a script
    func1()

second.py:

import first

def second_func():
    print 'inside second_func in second.py'

if __name__ == '__main__':
    # second.py executed as a script
    second_func()
    first.func1() # executing a function from first.py

编辑

  • 如果您愿意,您还可以选择简单的execfile(“second.py”)(尽管它仅在调用命名空间内)。
  • 最后一个选项是使用os.system,如下所示:
    os.system(“second.py”)

2
我发现execfile与R语言中的source最相似。 - vpipkt
我同意vpipkt的观点。这可能不是最符合Python风格的做法,但有时我只想像在R中的source()函数一样执行另一个Python脚本,就好像它在第一个脚本中一样。这个问题也很有帮助。 - mickey
关于@ldos在他们编辑后的答案中第一条要点的注释:“(尽管它仅限于调用命名空间内)”,为了避免这个问题,我们可以使用sitecustomize包中的runfile(),以便包含的脚本在其自己的命名空间中运行。在我的情况下,这个特性非常重要,因为从包含的脚本中,我需要访问__file__属性,当使用execfile()时,它解析为_调用_脚本的文件名!(对我来说没有用,因为在包含的脚本内部,我需要检索它的目录位置) - mastropi

1
如果你习惯于直接从GitHub获取资源,你可以使用requests包通过http get下载*.py文件的原始数据,并执行该文件。
import requests
exec(requests.get('http://github.myorg.net/raw/repo/directory/file.py').text)

免责声明:我是一个使用R语言的用户,正在学习Python,因此可能违反了一些Python最佳实践。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接