无法找到Python子进程的文件或目录

1 投票
1 回答
2613 浏览
提问于 2025-04-18 04:39

我想调用一个Python模块,但出现了一个错误,提示“找不到test.sh”。

其实这个文件在目录里是能找到的。

process = subprocess.Popen("test.sh",shell=True)

这个脚本和sh文件是在同一个目录下的。

1 个回答

3

默认情况下,当前目录不在系统的路径中,所以直接输入 "test.sh" 是找不到这个文件的。最简单的解决办法是用 "./test.sh" 来运行。

要运行一个脚本,确保文件开头有一个有效的“shebang”,比如 #!/bin/sh,而且这个文件需要有可执行的权限(可以用 chmod u+x test.sh 来设置)。

如果你是在不同的目录下运行 Python 脚本,那么你也需要提供完整的路径:

#!/usr/bin/env python
import os
import sys
from subprocess import check_call

script_dir = os.path.realpath(os.path.dirname(sys.argv[0]))
check_call(os.path.join(script_dir, "test.sh"))

注意:这里没有使用 shell=True,因为那样会启动一个额外的、不必要的 shell 进程。realpath 可以解析符号链接,如果你想要的是相对于脚本符号链接的路径,可以用 abspath

撰写回答