我正在使用tqdm
包在python中显示进度条。
tqdm还有一个Jupyter笔记本小部件(tqdm_notebook()
)的小部件,允许一个漂亮的" web-ish"进度条。
我的问题是我在code.py
文件中有一个tqdm进度条,我将其导入到jupyter笔记本中。
从常规python eviroment(即code.py
,Ipython
,IDLE
)运行shell
时,我希望tqdm以正常形式运行:
from tqdm import tqdm
a = 0
for i in tqdm(range(2000)):
a+=i
但是当我将code.py
导入Jupyter时,我希望它使用tqdm_notebook()
:
from tqdm import tqdm_notebook as tqdm
a = 0
for i in tqdm(range(2000)):
a+=i
如何让python区分环境?
我发现this post建议检查get_ipython().__class__.__name__
或'ipykernel' in sys.modules
但它并没有区分笔记本和其他Ipython shell(例如Spyder或IDLE)。
答案 0 :(得分:1)
func nextIteration() {
print ("dialogSemaphore = \(dialogSemaphore)")
switch (dialogSemaphore){
case 3:
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) {
self.nextIteration()
}// wait 1 sec
break
case 4:
dialogSemaphore = 5
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) {
self.nextIteration()
}// wait 1 sec
break
case 5:
performSegue(withIdentifier: "SegueToViewHistory", sender: nil)
dialogSemaphore = 3 // back to neutral
break
default:
print ("wtf \(dialogSemaphore)")
break
}
}
现在具有一个tqdm
模块。来自doc:
通过使用autonotebook子模块,可以让tqdm在控制台版本或笔记本版本之间自动选择:
autonotebook
请注意,如果在笔记本中运行,这将发出from tqdm.autonotebook import tqdm
tqdm.pandas()
,因为这不可能区分jupyter笔记本和jupyter控制台。 使用自动而不是自动笔记本来禁止显示此警告。
答案 1 :(得分:0)
显然,使用sys.argv
可以在这里提供帮助。
import sys
print sys.argv
在Jupyter
中运行此代码将具有以下参数:
['C:\\Users\\...\\lib\\site-packages\\ipykernel\\__main__.py',
'-f',
'C:\\Users\\...\\jupyter\\runtime\\kernel-###.json']
当然从shell / IDLE运行时不会有jupyter
行。
因此code.py
中的import语句应为:
if any('jupyter' in arg for arg in sys.argv):
from tqdm import tqdm_notebook as tqdm
else:
from tqdm import tqdm