我正在我的jupyter笔记本中使用iruby,内核正在按预期工作,并接受所有的ruby语法。
不幸的是,%%bash命令会导致错误。所以在我的笔记本中没有控制台命令可用。如果我切换回基本python内核,%bash命令将按预期工作。
如何实现bash命令在iruby内核中工作?有什么东西我忘记安装或安装了吗?
我在Ubuntu20.04中使用了以下设置:
我还使用rvm来管理我的红宝石版本。
基本设置
sudo apt install python3-pip python3-dev
sudo -H pip3 install --upgrade pip
sudo -H pip3 install virtualenv
pip install jupyter安装iruby
gem install ffi-rzmq
gem install iruby --pre
iruby register --force设置和启动
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),我得到了一个执行,但是输出看起来与

因此,为了获得正确的输出,我添加了以下内容:
%x(ls -la).each_line(chomp: true){|s| p s}它接近输出,但随后在笔记本中输出了一个指示字符串。

所以我的最终解决方案,也是为了减少执行命令的复杂性,我现在在笔记本的开头使用一种方法。
def execute_console(input)
%x(#{input}).each_line(chomp: true){|s| p s}
return nil
end这样,我就可以在我的笔记本中使用rails执行特殊的命令
rails routes在……里面
execute_console('rails routes')输出和预期的输出一样,没有任何字符串输出。

语法错误也会按预期打印出来。
发布于 2021-01-06 15:58:29
要在系统级别执行命令,您可以使用以下任何一种方法:Kernel#system、%x (更多关于字符串百分比的信息见下文)或Kernel#` (“后退滴答”)
system('pwd')
%x(pwd)
`pwd`这些都将在进程中运行,并以字符串的形式返回输出。
如果希望命令在单独的进程中运行,可以使用其他选项,如IO.popen或fork { exec('pwd') } (如果操作系统支持的话)
TL;博士为什么会发生错误
现在来解释您的实际错误以及它发生的原因。
这一行是,但是%%bash是由ruby解释的,它正在寻找一个关闭的%。%是另一种创建字符串文本(称为“百分比字符串”)的方法。
这个语法的有趣之处在于它实际上没有定义的分隔符。(基本上大多数非字母数字都可以打开和关闭)
%{bash}
#=> "bash"
%(bash)
#=> "bash"
%|bash|
#=> "bash"文档的最后一行声明
如果您分别使用“(”、“”、“{”、“<”)、“”、“}”、“>”来关闭它。您可以使用大多数其他非字母数字字符作为百分比字符串分隔符,例如“%”、“AC.26”、“^”等。
在您的例子中,%被用作分隔符。
%%bash%
#=> "bash" 但是,由于没有关闭的%,这被解释为:
%%bash
pwd
--EOF--因此,您所接收的错误是因为String ("bash\npwd)未终止。
https://stackoverflow.com/questions/65580820
复制相似问题