在 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(第一个解决方案也是如此)所以请注意由此产生的行为。