WSL2启动Jupyter,自动使用宿主机浏览器访问

馋奶兔 提交于 2020-08-06 10:51:57

使用本方法前,请确保Jupyter安装完成。

思路说明:

按以下思路编写shell脚本(文末直接查看脚本)

  1. 指定使用WSL2网络地址0.0.0.0启动Jupyter
jupyter notebook --ip=0.0.0.0
  1. ifconfig查看WSL2 IPV4地址
  2. 将启动时输出的访问地址中的IP替换为WSL2 IPV4地址
  3. 通过wsl2打开宿主机浏览器,访问上一步中输出的地址

wsl中允许调用window命令或执行.exe文件。例如在wls中执行以下命令,可以打开chrome并访问百度。

${chrome路径}/chrome.exe "http://www.baidu.com"

此处需要注意:windows目录中可以包含空格。在wsl命令行中直接使用到带空格的目录时,直接加上反斜杠对空格进行转义即可。但是在shell脚本中,即使进行了转义,使用时还是会报错。

解决的办法是,先用ln -s ${.exe路径} ${指定路径}/${别名}将需要使用到的exe文件直接链接到指定目录,再在shell脚本中进行调用。

例如:(请根据实际情况修改exe路径,及链接的目标路径)

# 我使用的是新版edge,exe路径为“C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe”,在wsl中只需要将“C:”改为“/mnt/c”
ln -s /mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe /home/${WSL用户名}/wincmd/edge

#这样就可以使用/home/${WSL用户名}/wincmd/edge 打开edge了 #添加上URL,就可以打开指定网页

/home/${WSL用户名}/wincmd/edge "http://www.baidu.com"

#若长期使用,可以考虑修改.bashrc,将其加入到环境变量中

启动脚本

复制以下脚本,并创建“jupyter.sh”,修改指定内容后,使用./jupyter.sh [启动路径]即可启动并输出访问地址。

#!/usr/bin/env bash

#set -ex

# 若有多个jupyter,此处可直接指定路径
jupyter=$(which jupyter)
# 指定浏览器,请根据实际情况修改
bowser=/home/${WSL用户名}/wincmd/edge

# 指定Jupyter启动路径
basedir=$1
if [[ ${basedir} = '' ]];then
    echo "usage:"
    echo "    ./jupyter.sh [path]"
    echo "        [path]        The base path of Jupyter"
    exit 1
fi

# 进入Jupyter启动路径
cd "${basedir}" || exit 1
echo "启动路径: $(pwd)"
# 使用WSL2网络地址启动Jupyter,并重定向日志
nohup "${jupyter}" notebook --ip=0.0.0.0 > jupyter.log &

# 请根据实际启动速度调节等待时间
sleep 2s
# 搜索token
token=$(head jupyter.log | grep token=)
# 截取端口及之后的内容
port=${token##*:}
# 截取端口
port=${port%%/*}
# 截取"="之后的token
token=${token##*=}

# 获取WSL2 IP
ip=$(ifconfig | grep 'inet ' | awk '{print $2}' | grep -v 127)

# 输出访问地址
url="http://${ip}:${port}/?token=${token}"
echo "$url"
# 使用宿主机浏览器进行访问
${bowser} "$url"
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!