如何通过Python打开新gnome-terminal终端并执行指定命令
问题根因
两个报错分别对应两个独立问题:
-e参数已被gnome-terminal弃用,当前版本要求使用--作为参数终止符,后面拼接要执行的命令cd是shell内置命令,并非系统中独立存在的可执行文件,gnome-terminal默认会将后续参数直接作为可执行程序启动,因此无法直接识别cd、重定向、管道等shell语法,需要显式调用shell解释器执行命令串
另外原写法里还存在单引号嵌套冲突的问题,外层单引号和echo命令的单引号提前闭合,导致命令解析错误。
可行解决方案
直接修改原有os.system写法
import os os.system('gnome-terminal -- bash -c "cd /home/john/Documents; echo \'writing to file\' > testfile.txt; exec bash"')
各部分说明:
--:替代弃用的-e参数,标识后续所有内容都是要执行的命令参数bash -c "命令串":显式启动bash shell,由shell解释执行内部的cd、重定向等语法- 末尾的
exec bash:指定命令执行完成后保留终端,进入交互模式,如果不需要保留终端可删除该部分 - 对echo命令的单引号做了转义,避免字符串提前闭合
更稳妥的subprocess写法(推荐)
使用subprocess的列表形式传参,不需要手动处理转义字符,兼容性更好:
import subprocess command = [ "gnome-terminal", "--", "bash", "-c", "cd /home/john/Documents; echo 'writing to file' > testfile.txt; exec bash" ] subprocess.Popen(command)
内容的提问来源于stack exchange,提问作者hrmnsio
相关产品推荐
相关产品推荐

