import subprocess
subprocess.call(" python script2.py 1", shell=True)
此代码不起作用。它告诉我python上的权限被拒绝。任何修复?
答案 0 :(得分:0)
我不知道您是否在bash终端中执行此操作,但如果您是,则必须授予自己.py文件的权限。所以输入这个
---
title: "Untitled"
output:
flexdashboard::flex_dashboard:
storyboard: true
runtime: shiny
---
```{r setup, include=FALSE}
library(shinyjs) # add package, note runtime option above in YAML
useShinyjs(rmd = TRUE) # function needs to initialise js
library(flexdashboard)
library(plotly)
```
### ggplot
```{r}
library(plotly)
carggplot <- ggplot(mtcars, aes(hp, mpg, fill = as.factor(carb))) +
geom_point() +
theme_bw()
ggplotly(carggplot)
```
### plotly
```{r}
carsplot <- plot_ly(
data = mtcars,
x = ~hp,
y = ~mpg,
color = ~as.factor(carb),
type = "scatter",
mode = "markers"
)
carsplot
runjs("$svg.selectAll('rect[class=scrollbar]').remove();") # run plain js to remove elements
```
然后终端会给你许可
答案 1 :(得分:0)
使用Subprocess.call()的建议
当shell = True是危险的吗?
如果我们执行可能包含来自不受信任来源的未经过处理的输入的shell命令,则会使程序容易受到shell注入攻击,这是一个严重的安全漏洞,可能导致任意命令执行。因此,在从外部输入构造命令字符串的情况下,强烈建议不要使用shell = True
参考:When to use Shell=True for Python subprocess module
import subprocess
subprocess.call(" python script2.py 1", shell=True)
在子进程中尝试避免shell = True。而是使用
import subprocess
subprocess.call(['python','script2.py','1'])
将所有内容作为列表传递,避免shell = True
import subprocess
subprocess.call('python script2.py 1'.split())
'python script2.py 1'.split()将创建一个类似['python','script2.py','1']的列表
解决权限问题
为您的脚本添加执行权限。
chmod + x script2.py