[英]Using %run in jupyter notebook without affecting interactive namespace
您不會從腳本返回任何內容或重置 var1 的值。 這個答案應該會有所幫助。 您需要在myscript.py
中編寫一個返回所需值的函數,然后將其設置為var1
。
腳本文件
def this_awesome_function():
return 10
筆記本:
from myscript import this_awesome_function
var1 = this_awesome_function()
print(var1)
希望這應該有效!
我的一位同事給出了以下答案,這是迄今為止我找到的最好的答案:
import subprocess
var1 = 9
subprocess.Popen(["python3", "myscript.py"])
print(var1)
我不確定 jupyter notebook 是否允許您執行此操作。 它很可能使用%run
或%prun
但無法弄清楚。
目前不使用%run
(見底部); 但是,您不需要從筆記本內部運行 bash 腳本或調用subprocess
。 您可以使用以下命令將命令發送到單獨的 shell 實例並運行腳本,而不會影響您的本地命名空間:
!python myscript.py
有關更多信息,請參閱此處的“IPython 中的 Shell 命令”和下面的部分。 Jupyter Python 筆記本建立在 IPython 能力之上。
正如我在這里建議的那樣,通常您希望在 Jupyter 中使用功能更全面的%run
,因為它可以處理回傳錯誤、 input
提示,並將腳本的輸出更好地連接到一般的 Jupyter 筆記本。
所以你沿着最佳實踐的路線思考得很好; 但是,您與筆記本中的變量重疊,您希望避免的腳本的主要部分可以使用!python myscript.py
輕松完成。 通常,當您使用函數更多地模塊化腳本時, main
命名空間中實際上不會有太多內容。
我在這里看到的文字讓您認為-p
選項應該按照您的想法執行:
在這種模式下,程序的變量不會傳播回 IPython 交互式命名空間(因為它們保留在分析器執行它們的命名空間中)。
它似乎確實描述了您在說什么,而我無法解釋為什么它沒有。 我什至嘗試了當前的 IPython 並且發生了同樣的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.