为什么这个python代码告诉我权限被拒绝?

时间:2017-10-25 03:01:28

标签: python subprocess

import subprocess
subprocess.call(" python script2.py 1", shell=True)

此代码不起作用。它告诉我python上的权限被拒绝。任何修复?

2 个答案:

答案 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