Reticulate - Get Python result without assigning to variable
如果可能的话,我想在 R 中打印 python 代码的结果(不分配给变量)。
这行得通:
1 2 3 | library(reticualte) py_run_string("print(2)") 2 |
这行得通:
1 2 3 | p = py_run_string("x = 2") p$x 2 |
我希望这个工作:
1 2 | py_run_string("2") 2 |
背景:
即使不使用 (print),我也想阅读完整的 python 代码并捕获输出。
如果我打开 Python3.7 Shell 并仅执行"2"作为命令,输出将为"2"。这里是空的。
Github 请求链接:https://github.com/rstudio/reticulate/issues/595。
在尝试过这个之后,我会选择
试过了:
1 2 3 | return( py_run_string("2") ) |
试过了:
1 2 3 4 5 6 7 | f <- function() { return( py_run_string("2") ) } f() |
std out 中似乎没有任何内容
对比:
1 2 3 4 5 6 7 | b <- function() { return(2) } b() # Out[]: 2 |
我猜它正在访问 python 的
还有:
1 2 3 4 5 6 7 8 9 10 | library(reticulate) py_run_string("2") ls() # Out[1]: None a <- 3 ls() # Out[2]: 'a' |
R 的局部变量中没有任何内容代表
Github 请求链接:https://github.com/rstudio/reticulate/issues/595。
我在 Github 上从 Kevin Ushey 那里得到了答案。
1 2 3 4 5 6 7 8 9 10 11 | 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。