【问题标题】:Execute code from non .py file in python [duplicate]从python中的非.py文件执行代码[重复]
【发布时间】:2018-04-22 03:51:31
【问题描述】:

我正在尝试让 python 从给定文件中执行随机代码行。假设我有一个名为“code_lines”的文件。此文件包含随机的 Python 代码片段,例如。

print("This is a random message")
print("This is another message")
print("This is getting boring")

python 是否可以从该文件中随机选择一行并将其作为代码运行?

【问题讨论】:

  • 您可以运行python your_file.whatever,它会尝试将文件作为 Python 代码执行,但无法执行“随机行”。不过,它会尝试将此文件中的数据视为普通 Python 代码。
  • 这个问题已经有人问过了。请看:stackoverflow.com/questions/31704916/…
  • 您可以使用exec。不幸的是,我无法再给出答案。

标签: python python-3.x random


【解决方案1】:

尝试使用exec 语句。当然,在实际情况下,这可能会导致几个问题,因为您尝试从文件中执行随机行,但它适用于简单的代码行(就像您在示例 code_lines.py 中提供的代码行一样)。

from random import randint

with open('code_lines.py') as file:
    line = file.readline()
    count = 0
    code =[]
    while line:
        code += [line]
        line = file.readline()
        count += 1
    exec(code[randint(0,count-1)])

【讨论】:

    【解决方案2】:

    使用random模块随机选择,exec执行任意Python代码。

    import random
    
    with open('code_lines') as f:
        exec(random.choice(f.readlines()))
    

    警告:execeval 非常危险。如果其他人可以向code_lines 编写代码,他们几乎可以对您的计算机做任何他们想做的事情。此外,如果您选择的代码行依赖于其他行,它可能会失败。

    【讨论】:

    • 您的意思可能是exec 而不是eval
    • @officialaimm 我实际上忘记了exec 的存在。不出所料,我从未将任何一种用于我编写的实际代码。
    猜你喜欢
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 2020-09-18
    • 2022-06-25
    相关资源
    最近更新 更多