2017-07-06 26 views
0

我正在使用tqdm包提供python中的进度条。tqdm在不同python环境下的变化

tqdm也有一个Jupyter笔记本电脑的小部件(tqdm_notebook()),允许一个漂亮的“web-ish”进度条。

我的问题,我有一个code.py文件内的tqdm进度条,我导入到jupyter笔记本。

当运行code.py从常规的Python eviroment(即IpythonIDLEshell)我想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的外壳程序(如在Spyder的或IDLE)区分。

回答

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