在 Jupyter 笔记本的单元格内执行时,无法使用 "cd" 命令更改目录
Cannot change directory with "cd" command when it is executed inside cell in a Jupyter notebook
我是 运行 Python 笔记本,在 Google 云平台虚拟机中。
我试图通过 运行 Jupyter 笔记本单元格中的这段代码更改目录。
print(user_path)
/home/praveen
!pwd
!cd '{user_path}'
!pwd
/home/jupyter
/home/jupyter
如上所示,执行cd
命令后路径相同。这是 Jupyter 中的限制吗?
是的,这是 Jupyter 的正确行为。所有 !
命令都在它们自己的子 shell 中执行,因此结果不是永久的。您可以通过使用 %
作为前缀来以更持久的方式执行您想要的操作:
In [0] : !pwd
/Users/z4
In [1] : %cd ..
/Users
In [2] : %pwd
'/Users'
In [3] : !pwd
/Users
为了方便起见,除了交互式会话之外,我不会尝试依赖它。如果您需要 shell 脚本,请编写 shell 脚本。要使用 %
,您需要启用 "automagic"(默认情况下应该是)。
您也可以在一定程度上解决这个问题,方法是让所有 shell 命令在同一个 shell:
中执行
In [0] : !pwd && cd .. && pwd
/Users/z4
/Users
In [1] : !pwd
/Users/z4
在这种情况下,Jupyter 将 !
之后的所有内容传递给 shell,并且 shell 以通常的方式解释 &&
。这是一个 hack(第一个解决方案也是如此)所以请注意由此产生的行为。
我是 运行 Python 笔记本,在 Google 云平台虚拟机中。
我试图通过 运行 Jupyter 笔记本单元格中的这段代码更改目录。
print(user_path)
/home/praveen
!pwd
!cd '{user_path}'
!pwd
/home/jupyter
/home/jupyter
如上所示,执行cd
命令后路径相同。这是 Jupyter 中的限制吗?
是的,这是 Jupyter 的正确行为。所有 !
命令都在它们自己的子 shell 中执行,因此结果不是永久的。您可以通过使用 %
作为前缀来以更持久的方式执行您想要的操作:
In [0] : !pwd
/Users/z4
In [1] : %cd ..
/Users
In [2] : %pwd
'/Users'
In [3] : !pwd
/Users
为了方便起见,除了交互式会话之外,我不会尝试依赖它。如果您需要 shell 脚本,请编写 shell 脚本。要使用 %
,您需要启用 "automagic"(默认情况下应该是)。
您也可以在一定程度上解决这个问题,方法是让所有 shell 命令在同一个 shell:
中执行In [0] : !pwd && cd .. && pwd
/Users/z4
/Users
In [1] : !pwd
/Users/z4
在这种情况下,Jupyter 将 !
之后的所有内容传递给 shell,并且 shell 以通常的方式解释 &&
。这是一个 hack(第一个解决方案也是如此)所以请注意由此产生的行为。