第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

將用戶輸入插入后端 python shell

將用戶輸入插入后端 python shell

茅侃侃 2022-12-06 15:04:47
我正在做一個(gè)寵物項(xiàng)目,我正在嘗試制作 Jupyter 的命令行版本(我完全理解這聽(tīng)起來(lái)有多愚蠢,“為什么不只使用 Python shell”,這只是為了好玩)。我一直在想辦法在后臺(tái)啟動(dòng)一個(gè) Python 實(shí)例,允許我將用戶的輸入插入到那個(gè) shell 中。但我就是找不到任何辦法。有什么合理的方法可以做到這一點(diǎn)嗎?謝謝!編輯:我正在考慮類(lèi)似Jython的東西,但如果可能的話,我更愿意完全用 Python 來(lái)完成。
查看完整描述

1 回答

?
MM們

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


查看完整回答
反對(duì) 回復(fù) 2022-12-06
  • 1 回答
  • 0 關(guān)注
  • 92 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)