MM们
我可以想到两种方法来做到这一点。第一种方法是exec用来执行用户输入的代码。while True: user_input = input("Python command to execute: ") try: exec(user_input) except Exception as e: print("Error thrown.")然而,这有其局限性。您必须编写一些自定义代码来捕获错误、适当地抛出错误等。第二种方法涉及更多,但也更通用。您使用everything is a file方法,并将用户输入(无论是通过 shell、网站还是其他任何方式)视为文件。然后,使用该文件执行它。您可以始终打开 shell,在执行之前检查文件是否已更新:import hashlibimport runpyimport timeFILE = "./file.py"def get_file_md5(file_name): with open(file_name, "rb") as f: return hashlib.md5(f.read()).hexdigest()md5 = get_file_md5(FILE)first_run = Truewhile True: current_md5 = get_file_md5(FILE) if md5 != current_md5 or first_run: first_run = False md5 = current_md5 try: runpy.run_path(FILE) except Exception as e: print("Error", e) else: time.sleep(1)您可能会发现我对另一个(模糊相关的)问题的回答很有趣并且很有用。关于下面。通知exec(object[, globals[, locals]])文件:在所有情况下,如果省略可选部分,代码将在当前范围内执行。如果仅提供全局变量,则它必须是一个字典(而不是字典的子类),它将同时用于全局变量和局部变量。所以你可以这样做:exec_globals = {}exec('a = 10; print(a)', exec_globals)print("\na in exec_globals: ", 'a' in exec_globals)print("exec_globals['a'] =", exec_globals['a'])print("\na in globals(): ", 'a' in globals())print(a)以上将输出:10a in exec_globals: Trueexec_globals['a'] = 10a in globals(): FalseTraceback (most recent call last): File "test.py", line 7, in <module> print(a)NameError: name 'a' is not defined