我正在查看处理参数的方法,当我意识到我实际上想做一些稍微不同的事情时。
基本上,我在Jupyter中编写python3脚本作为foo.ipynb
在小数据集上测试它,并与我的团队轻松共享,但我也将脚本导出到foo.py
并在我们的集群上运行它以获得更大的数据集。我希望它有一些不同的行为,比如从参数中获取文件路径或不,这取决于脚本是如何运行的。
python脚本是否有办法知道它是在Jupyter笔记本中运行还是通过命令行运行?我们的集群使用slurm,所以foo.py
将从bash脚本调用,是否有任何方法来处理?
您可以使用__file__
(Python文档)
当通过python foo.py
直接调用foo.py
时,__file__
将被设置,例如:只有print(__file__)
的foo.py
将输出foo.py
。
如果在Jupyter中调用,则不会设置。
关于slurm,我建议在脚本中传递另一个参数来区分它,例如foo.py --slurm
与argparse。
代码附录:
if '__file__' in locals():
print(__file__)
else:
print('__file__ not set')