首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在jupyter笔记本中不可能有bash命令

在jupyter笔记本中不可能有bash命令
EN

Stack Overflow用户
提问于 2021-01-05 14:29:47
回答 1查看 195关注 0票数 5

我正在我的jupyter笔记本中使用iruby,内核正在按预期工作,并接受所有的ruby语法。

不幸的是,%%bash命令会导致错误。所以在我的笔记本中没有控制台命令可用。如果我切换回基本python内核,%bash命令将按预期工作。

如何实现bash命令在iruby内核中工作?有什么东西我忘记安装或安装了吗?

我在Ubuntu20.04中使用了以下设置:

我还使用rvm来管理我的红宝石版本。

基本设置

代码语言:javascript
复制
sudo apt install python3-pip python3-dev
sudo -H pip3 install --upgrade pip
sudo -H pip3 install virtualenv
pip install jupyter

安装iruby

代码语言:javascript
复制
gem install ffi-rzmq
gem install iruby --pre
iruby register --force

设置和启动

代码语言:javascript
复制
rvm use ruby-2.7.2
mkdir ~/ruby_notebook

virtualenv ~/ruby_notebook/ruby_env
source ~/ruby_notebook/ruby_env/bin/activate

jupyter notebook --notebook-dir ~/ruby_notebook

但是,会发生以下错误:

有什么想法可以解决这个问题,这样我就可以使用bash命令了吗?

========更新与解决方案======

多亏了engineersmnky我找到了解决方案:

与python笔记本一样,我希望实现以下输出:

通过命令%x(ls -la),我得到了一个执行,但是输出看起来与

因此,为了获得正确的输出,我添加了以下内容:

代码语言:javascript
复制
%x(ls -la).each_line(chomp: true){|s| p s}

它接近输出,但随后在笔记本中输出了一个指示字符串。

所以我的最终解决方案,也是为了减少执行命令的复杂性,我现在在笔记本的开头使用一种方法。

代码语言:javascript
复制
def execute_console(input)
  %x(#{input}).each_line(chomp: true){|s| p s}
  return nil
end

这样,我就可以在我的笔记本中使用rails执行特殊的命令

代码语言:javascript
复制
rails routes

在……里面

代码语言:javascript
复制
execute_console('rails routes')

输出和预期的输出一样,没有任何字符串输出。

语法错误也会按预期打印出来。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-06 15:58:29

要在系统级别执行命令,您可以使用以下任何一种方法:Kernel#system%x (更多关于字符串百分比的信息见下文)或Kernel#` (“后退滴答”)

代码语言:javascript
复制
system('pwd')
%x(pwd) 
`pwd`

这些都将在进程中运行,并以字符串的形式返回输出。

如果希望命令在单独的进程中运行,可以使用其他选项,如IO.popenfork { exec('pwd') } (如果操作系统支持的话)

TL;博士为什么会发生错误

现在来解释您的实际错误以及它发生的原因。

这一行是,但是%%bash是由ruby解释的,它正在寻找一个关闭的%%是另一种创建字符串文本(称为“百分比字符串”)的方法。

这个语法的有趣之处在于它实际上没有定义的分隔符。(基本上大多数非字母数字都可以打开和关闭)

代码语言:javascript
复制
%{bash}
#=> "bash" 
%(bash)
#=> "bash"
%|bash| 
#=> "bash"

文档的最后一行声明

如果您分别使用“(”、“”、“{”、“<”)、“”、“}”、“>”来关闭它。您可以使用大多数其他非字母数字字符作为百分比字符串分隔符,例如“%”、“AC.26”、“^”等。

在您的例子中,%被用作分隔符。

代码语言:javascript
复制
%%bash%
#=> "bash" 

但是,由于没有关闭的%,这被解释为:

代码语言:javascript
复制
%%bash
pwd 
--EOF--

因此,您所接收的错误是因为String ("bash\npwd)未终止。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65580820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档