无需将Python结果分配给变量即可获得Python结果

4
如果可能的话,我想在R中打印Python代码的结果(不需要分配给变量)。
以下方法可以实现:
library(reticualte)
py_run_string("print(2)")
2

这是有效的:

p = py_run_string("x = 2")
p$x
2

我希望这能够正常工作:
py_run_string("2")
2

背景:

我希望能够阅读完整的Python代码,并在不使用(print)的情况下捕获输出。

如果我在Python3.7 Shell中只执行"2"作为命令,输出将为"2"。这里是空的。

Github请求链接:https://github.com/rstudio/reticulate/issues/595

2个回答

1
我尝试过后,我会选择这个选项。
尝试过的内容:
return(
    py_run_string("2")
)

尝试过:

f <- function() {
   return( 
       py_run_string("2")
   )
}

f()

标准输出中似乎没有任何内容

与:

b <- function() {
   return(2)
}

b()

# Out[]:  2

我猜它正在访问Python的local()变量。

另外:

library(reticulate)

py_run_string("2")
ls()
# Out[1]:   None


a <- 3
ls()
# Out[2]:   'a'

在R的本地变量中没有代表py_run_string()输出的内容。

Github请求链接:https://github.com/rstudio/reticulate/issues/595


1
谢谢你的回答,非常感谢。我也在Github上开了一个问题。如果那里没有更新,我会接受你的答案,好吗? - Tlatwork
1
没问题。顺便说一下,在 GitHub 的问题页面上,我认为有一种方法可以将它们标记为功能请求。 - Kermit
我进行了一次编辑。(不小心影响到了您的回答,非常抱歉) - Tlatwork
不确定你是否在Github上收到了通知。Kevin Ushey提供了一个答案。 - Tlatwork

1

我在 Github 上得到了 Kevin Ushey 的答案。

library(reticulate)

py_evaluate <- function(code) {
  builtins <- import_builtins(convert = TRUE)
  globals <- py_eval("globals()", convert = FALSE)
  locals <- globals
  parsed <- builtins$compile(code, "<string>", "single")
  builtins$eval(parsed, globals, locals)
}

py_evaluate("2")

请看这里:https://github.com/rstudio/reticulate/issues/595#issuecomment-531888843

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接