我发现了如何在代码中使用pip命令:
library(plotly)
library(shiny)
library(DT)
library(dplyr)
ui <- fluidPage(
mainPanel(
plotlyOutput("heat")
),
DT::dataTableOutput('tbl4')
)
server <- function(input, output, session) {
output$heat <- renderPlotly({
col1<-sample(500, size = 500, replace = TRUE)
col2<-sample(500, size = 500, replace = TRUE)
d<-data.frame(col1,col2)
d=d %>%
group_by(col2) %>%
mutate(count = n()) # You can programatically add count for each row
render_value(d) # You need function otherwise data.frame NN is not visible
p <- plot_ly(x = d$count, type = "histogram",source="subset")
# You should histogram of count
# set source so that you can get values from source using click_event
})
render_value=function(d){
output$tbl4 <- renderDataTable({
s <- event_data("plotly_click",source = "subset")
print(s)
return(DT::datatable(d[d$count==s$x,]))
})
}
}
shinyApp(ui, server)
它将在命令提示符下显示所有软件包。
但是这种方式不起作用:
import subprocess
subprocess.call(["pip", "freeze"])
它不会将其写入文件,而是再次在控制台中打印。
如何以正确的方式运行此命令?
答案 0 :(得分:7)
使用此:
>>> with open('requirements.txt', 'w') as file_:
... subprocess.Popen(['pip', 'freeze'], stdout=file_).communicate()
...
或者call
(如果您愿意)
>>> with open('requirements.txt', 'w') as file_:
... subprocess.call(['pip', 'freeze'], stdout=file_)
答案 1 :(得分:3)
重定向是在Shell /终端中实现的,这意味着必须在命令行中使用shell=True
关键字参数来执行命令。否则,子进程将执行列表中的第一项,并将其余部分用作其参数。有关更多信息,请参见documentation。
subprocess.call("pip freeze > requirements.txt", shell=True)