Subprocess调用新窗口执行Python文件报错文件不存在求助
问题解析与解决方案
哦,这个问题我之前踩过坑!你遇到的错误根源是subprocess参数传递的方式不对——你把Python解释器和脚本路径拼成了单个字符串,系统会把这个带空格的字符串当成一个完整的可执行文件路径去查找,这显然不存在,所以才会报“No such file or directory”。
错误原因拆解
gnome-terminal -x的作用是在新终端里执行后面的命令,它要求后面的内容是独立的命令和参数项。你之前的写法是把/usr/bin/python3和脚本路径合并成一个字符串,相当于让系统去找一个名叫/usr/bin/python3 /media/root/MYDRIVE/tools/sniff/sniffer.py的文件,这显然不是一个合法的文件路径,自然找不到。
正确写法示例
你需要把命令和每个参数拆分成列表里的独立元素,这样subprocess才能正确识别哪个是命令,哪个是参数:
import os import subprocess current_path = os.path.dirname(os.path.realpath(__file__)) # 先拼接出完整的脚本路径,避免手动拼接出错 script_full_path = os.path.join(current_path, "sniffer.py") # 每个命令/参数单独作为列表元素 subprocess.call([ 'gnome-terminal', '-x', '/usr/bin/python3', script_full_path ])
额外优化方案
如果你的sniffer.py已经添加了可执行权限(通过chmod +x sniffer.py设置),并且在脚本第一行加上了shebang声明:
#!/usr/bin/env python3
那你可以直接执行脚本路径,不用显式调用python3:
subprocess.call([ 'gnome-terminal', '-x', script_full_path ])
另外提一句:部分新版GNOME Terminal可能推荐用--代替-x,写法是gnome-terminal -- /usr/bin/python3 script_path,效果是一样的,你可以根据自己的终端版本选择。
内容的提问来源于stack exchange,提问作者rockstar1820
相关产品推荐
相关产品推荐

