2010-10-20 243 views
0

嗯,我想在運行時輸入一個python函數作爲輸入,並執行代碼'n'的部分。例如,使用tkinter我創建一個文本框,用戶編寫函數並提交它,同時提到它要執行多少次。我的程序應該能夠像用戶所提到的那樣多次運行該功能。如何在運行時輸入python代碼並執行它?

Ps:我想到了一種替代方法,用戶可以在程序中編寫程序,然後我可以在python程序中將它作爲python文件名作爲系統cmd執行,但我不想那樣。

+0

此解決方案可能適合您。只需在some_dict中使用exex input()創建一個用戶定義函數的字典。 http://stackoverflow.com/a/6098736/2368836 – rocktheartsm4l 2014-08-16 23:52:51

回答

1

這就是execfile()的用途。

http://docs.python.org/library/functions.html#execfile

  1. 創建一個臨時文件。

  2. 將文本框的內容寫入文件。

  3. 關閉。

  4. Execfile。

  5. 完成後刪除。

+0

好的性能也是一個約束在這裏,會創建和刪除一個臨時文件增加執行時間? – Rahul 2010-10-20 19:10:15

+0

是的。在顯微鏡下。嘗試測量它。 – 2010-10-20 19:19:10

1

Python提供的方法可以做到這一點使用函數調用次數: - 的eval() - EXEC()

爲了你的需求,你應該閱讀有關高管。

+0

只需要非常小心安全 - 你基本上允許任何有權訪問該輸入的用戶執行任意代碼作爲執行python的用戶程序。如果它只是一個單一的用戶環境,應該沒問題,但是如果程序的任何部分需要管理權限/ root權限,或者如果該輸入發送到其他地方執行的服務器,那麼您只是在尋求麻煩。 – user470379 2010-10-20 19:13:24

+0

基本上,輸入功能將在集羣網絡上運行。但現在我只限於單一系統,因爲我正在構建一個小型原型。但是你正在考慮哪種安全問題呢? – Rahul 2010-10-20 19:21:20

+1

讓某人能夠在'exec'中運行,使他們在機器上擁有非常完整的能力。如果有人跑這段代碼,你會感覺如何:'import os,os.path for root,dirs,os.walk('。')中的文件: f中的文件: fullpath = os.path.join(root ,f) os.remove(fullpath) ' – hughdbrown 2010-10-20 19:30:36