【问题标题】:Equivalent of source() of R in PythonPython 中 R 的 source() 等价物
【发布时间】:2016-05-23 10:47:29
【问题描述】:

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

【问题讨论】:

标签: python execute


【解决方案1】:

给定 2 个 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")

【讨论】:

  • 我发现execfile 与R 的source 最相似
  • 我同意 vpipkt。它可能不是最 Pythonic 的做事方式,但有时我只想执行另一个 Python 脚本,就好像它在第一个脚本中一样(这就是 source() 在 R 中所做的)。 This question 也很有帮助。
  • 关于@ldos 在他们编辑的答案的第一个项目符号上的注释:“(虽然它只在调用命名空间内)”:为了避免这个问题,我们可以使用@987654334 中的runfile() @package 以便包含的脚本在其自己的命名空间中运行。在我的场景中,这个特性特别重要,因为从包含的脚本中我需要访问 __file__ 属性,当使用 execfile() 时,该属性解析为 calling 脚本的文件名! (对我没用,因为在包含的脚本中,我需要检索它的目录位置)
【解决方案2】:

如果您习惯直接从 GitHub 采购,您可以使用 requests 包通过 http get 下载原始 *.py 文件,然后执行该文件。

import requests
exec(requests.get('http://github.myorg.net/raw/repo/directory/file.py').text)

免责声明:我是学习 Python 的 R 用户,因此这可能违反了一些 Python 最佳实践

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-14
    • 2018-07-18
    • 2016-06-14
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 2020-04-17
    • 2020-10-14
    相关资源
    最近更新 更多