1 回答

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊
我可以想到兩種方法來(lái)做到這一點(diǎn)。第一種方法是exec用來(lái)執(zhí)行用戶輸入的代碼。
while True:
user_input = input("Python command to execute: ")
try:
exec(user_input)
except Exception as e:
print("Error thrown.")
然而,這有其局限性。您必須編寫(xiě)一些自定義代碼來(lái)捕獲錯(cuò)誤、適當(dāng)?shù)貟伋鲥e(cuò)誤等。第二種方法涉及更多,但也更通用。您使用everything is a file方法,并將用戶輸入(無(wú)論是通過(guò) shell、網(wǎng)站還是其他任何方式)視為文件。然后,使用該文件執(zhí)行它。您可以始終打開(kāi) shell,在執(zhí)行之前檢查文件是否已更新:
import hashlib
import runpy
import time
FILE = "./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 = True
while 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)
您可能會(huì)發(fā)現(xiàn)我對(duì)另一個(gè)(模糊相關(guān)的)問(wèn)題的回答很有趣并且很有用。
關(guān)于下面。通知exec(object[, globals[, locals]])文件:
在所有情況下,如果省略可選部分,代碼將在當(dāng)前范圍內(nèi)執(zhí)行。如果僅提供全局變量,則它必須是一個(gè)字典(而不是字典的子類(lèi)),它將同時(shí)用于全局變量和局部變量。
所以你可以這樣做:
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)
以上將輸出:
10
a in exec_globals: True
exec_globals['a'] = 10
a in globals(): False
Traceback (most recent call last):
File "test.py", line 7, in <module>
print(a)
NameError: name 'a' is not defined
添加回答
舉報(bào)