[英]Permission denied to run shell script by subprocess.call
我使用 python 编写了 shell 脚本,它在我的终端上通过命令bash download_R1.sh
成功运行。
我想测试子进程是否可以在 python 中做同样的事情,因为我想在 python 脚本中集成一个管道。 这是我的代码的子流程部分:
downR1 = subprocess.call('./download_R1.sh')
它无法运行脚本并显示以下错误消息:
Error message:
PermissionError: [Errno 13] Permission denied: './download_R1.sh'
有人建议使用chmod +x
来获得该脚本的身份验证。 但是bash down.sh
正在工作。 不知道哪一部分出了问题。
有什么建议吗?
这是 shell 的正常行为方式。
如果程序或脚本没有执行权限( +x
),则不能直接运行它
但是,您可以指示其他程序bash
、 python
或其他程序运行文件,即使没有+x
foo.sh
#!/bin/bash
# If a parameter is received in the command $1, assign it to $NAME
# if not use the default "World"
NAME="${1:-World}"
echo "Hello ${NAME}"
foo.py
#!/usr/bin/env python
print "Hello World"
$ bash foo.sh
Hello World
$ bash foo.sh Person
Hello Person
$ ./foo.sh
bash: ./foo.sh: Permission denied
$ python foo.py
Hello World
$ ./foo.py
bash: ./foo.sh: Permission denied
$ chmod +x foo.sh foo.py
$ ./foo.sh
Hello World
$ ./foo.py
Hello World
在您的情况下,如果您想使用subprocess
进程运行程序但不授予文件执行权限,则必须使用:
subprocess.run(["bash", "download_R1.sh"])
如果您需要将 arguments 传递给脚本,只需将更多项目添加到列表中:
subprocess.run(["bash", "download_R1.sh", "argument1"])
关于使用 arguments 的子流程有几个问题, 比如这个。
如果您更喜欢仅在一个字符串中编写命令,建议不要使用shell=True
。 但是你可以使用类似的东西:
subprocess.run("bash download_R1.sh argument1".split())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.