Subprocess.run() 给出 PermissionError [Errno 13] 权限被拒绝“。” [重复]

问题描述 投票:0回答:1

我有一个名为 min.sh 的 bash 脚本,它只打印“launched”作为输出。我想从 python 启动它(python 脚本位于 min.sh 的同一文件夹中)。

为此,我使用

subprocess.run()
,运行命令
./min.sh
:

a = "./min.sh"
out = subprocess.run([x for x in a.split()], stdout=subprocess.PIPE).stdout.decode("utf-8").split() 

(我知道 split 函数在这里没用,但这条指令实际上是为了另一个任务而制作的,而不仅仅是启动 bash 脚本)

此作品包含:

['launched']

现在我想做同样的事情,但通过其绝对路径使用通用 bash 脚本(我仍然使用相同的脚本,但给出绝对路径)。如果我在终端中,指令将是

. absolutepath/min.sh

所以我尝试了:

a = ". absolutepath/min.sh"
out = subprocess.run([x for x in a.split()], stdout=subprocess.PIPE).stdout.decode("utf-8").split() 

但是我收到了这个错误:

PermissionError: [Errno 13] Permission denied: '.'

我在网上看到可以使用

subprocess.call()
代替
subprocess.run()
,但是没有办法存储输出。 有谁知道如何解决这个问题?谢谢!

python bash subprocess
1个回答
0
投票

执行

. path/to/script.sh
会将脚本“源”到当前 shell 中。假设 min.sh 的权限正确(设置了可执行位并且运行 Python 脚本的用户具有执行权限),您可以使用不带点的绝对路径。您可以在相对路径中使用点,但不要在 .和路径。

在 bash 中

source
.
相同。

© www.soinside.com 2019 - 2024. All rights reserved.