无法找到Python子进程的文件或目录
我想调用一个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
。