我有一个名为 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()
,但是没有办法存储输出。
有谁知道如何解决这个问题?谢谢!
执行
. path/to/script.sh
会将脚本“源”到当前 shell 中。假设 min.sh 的权限正确(设置了可执行位并且运行 Python 脚本的用户具有执行权限),您可以使用不带点的绝对路径。您可以在相对路径中使用点,但不要在 .和路径。
在 bash 中
source
与 .
相同。