【问题标题】:Cannot change directory with "cd" command when it is executed inside cell in a Jupyter notebook在 Jupyter 笔记本的单元格内执行时,无法使用“cd”命令更改目录
【发布时间】:2020-01-30 06:22:35
【问题描述】:

我在 Google Cloud Platform 虚拟机中运行 Python 笔记本。

我试图通过在 Jupyter 笔记本的单元格中运行此代码来更改目录。

print(user_path)

/home/praveen

!pwd
!cd '{user_path}'
!pwd

/home/jupyter

/home/jupyter

如上所见,cd命令执行后路径相同。这是 Jupyter 的限制吗?

【问题讨论】:

  • 如果这些行中的每一行都在其自己的 shell 中执行,则只有那一行会更改目录。
  • @Shawn 两个 pwd 命令和 cd 命令在同一个单元格中执行。

标签: linux jupyter-notebook jupyter-lab


【解决方案1】:

是的,这是 Jupyter 的正确行为。所有! 命令都在它们自己的子shell 中执行,因此结果不是永久的。您可以通过前缀 % 来以更持久的方式完成您所追求的事情:

In [0] : !pwd
/Users/z4
In [1] : %cd ..
/Users
In [2] : %pwd
'/Users'
In [3] : !pwd
/Users

为了方便起见,除了交互式会话之外,我不会尝试依赖它来进行任何操作。如果您需要一个 shell 脚本,请编写一个 shell 脚本。要使用%,您需要启用“自动”(默认情况下应该启用)。

你也可以通过让所有的 shell 命令在同一个 shell 中执行来在一定程度上解决这个问题:

In [0] : !pwd && cd .. && pwd
/Users/z4
/Users
In [1] : !pwd
/Users/z4

在这种情况下,Jupyter 将 ! 之后的所有内容传递给 shell,而 shell 以通常的方式解释 &&。这是一个 hack(第一个解决方案也是如此),所以请注意由此产生的行为。

【讨论】:

    猜你喜欢
    • 2018-10-19
    • 2016-06-16
    • 1970-01-01
    • 2016-05-30
    • 2013-03-18
    • 2013-10-10
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    相关资源
    最近更新 更多