我正在尝试编写一个脚本,以打开一个新的终端,然后从该终端运行一个单独的python脚本。
我试过了:
os.system("gnome-terminal 'python f.py'")
Run Code Online (Sandbox Code Playgroud)
和
p = Popen("/usr/bin/gnome-terminal", stdin=PIPE)
p.communicate("python f.py")
Run Code Online (Sandbox Code Playgroud)
但是这两种方法都只能打开一个新终端,而不能运行f.py。我将如何打开终端并运行单独的脚本?
编辑:我想打开一个新的终端窗口,因为f.py它只是一个正在运行的服务器serve_forever()。我希望原始的终端窗口保持“自由”状态以运行其他命令。
与大多数终端一样,gnome 终端需要选项来执行命令:
gnome-terminal [-e, --command=STRING] [-x, --execute]
Run Code Online (Sandbox Code Playgroud)
您可能需要添加-x选项:
x, --执行
在终端内执行命令行的其余部分。
所以:
os.system("gnome-terminal -x python f.py")
Run Code Online (Sandbox Code Playgroud)
&除非您添加到命令行,否则它不会在后台运行您的进程。
该communicate尝试需要为您的输入换行,但也应该可以工作,但是像终端这样的复杂进程不“喜欢”被重定向。看起来就像是倒着使用交互工具。再说一次,这会阻塞直到终止。可行的方法是使用p.stdin.write("python f.py\n")python 脚本来进行控制。但在这种情况下,它不太可能起作用。
所以看来你甚至不需要 python 来做你想要的事情。你只需要跑
python f.py &
Run Code Online (Sandbox Code Playgroud)
在一个壳里。