首页 > 解决方案 > 如何在笔记本中使用子进程?

问题描述

我想subprocess在 kaggle notebook 中使用,kaggle notebook 与 jupyter notebook 非常相似。

当我使用以下代码时,我得到了 0。

import subprocess
subprocess.call("ls")

我想要的是当前文件夹中的文件列表。

请问你能帮帮我吗?

标签: pythonlinuxubuntusubprocess

解决方案


您可以使用此代码。我无法解释它,因为我对子进程库一无所知,但是当我尝试它时,它可以在我的 jupyter 笔记本上运行。我从这个stackoverflow 线程中弄清楚了。但是,当我执行“ls -a”之类的操作时,我无法让它工作。

import subprocess

process = subprocess.Popen('ls',
                           stdout=subprocess.PIPE,
                           stderr=subprocess.STDOUT)


with process.stdout:
    for line in iter(process.stdout.readline, b''):
        print(line.decode().strip())

如果 Kaggle 笔记本具有与 Jupyter 笔记本相同的功能,这是一个更好的选择。

在 Jupyter 笔记本中,您可以通过!在 jupyter 笔记本单元格中的命令之前添加命令来执行命令。例如,您可以使用此命令从单元格中克隆 github 存储库!git clone https_repo_here。在上面的子流程示例中,我无法开始ls -a工作,但我可以通过!ls -a在 Jupyter 笔记本单元中使用它来使其工作。

Jupyter notebook 中另一个有用的提示是%. 我不知道这个东西的所有功能(我认为它被称为魔术符号),但我知道你可以,例如,通过编写%cd different_directory_here. 我不知道为什么,但如果你写了!cd different_directory_here,它不会永久改变你的 Jupyter 笔记本的工作目录。


推荐阅读