通常,没有办法从shell中执行此操作。您需要做的是运行终端程序本身,或者运行一些适合您的启动程序。对于每个终端程序,执行此操作的方法都不同。
在某些情况下,os.startfile可以做您想做的事情,但这并不是通用的。
另外,请注意,一般来说,您实际上需要脚本的绝对路径,因为新的终端窗口将运行新的Shell,因此不一定具有相同的工作目录。但对于示例,我将忽略它。
使用Windows cmd,最简单的方法是startshell命令。如果您使用的start是任何命令行程序,包括python,它将获得一个新的cmd窗口。因此,类似:
subprocess.call('start /wait python bb.py', shell=True)
OS X具有类似的命令open。而且它是一个真实的程序,而不是shell命令,因此您不需要shell=True。但是,运行带有的命令行程序或脚本open通常不会打开新的终端窗口。实际上,它的全部目的是允许您像在Finder中双击一样运行程序,除非它是.command文件,否则它永远不会在终端中运行任何程序。
因此,您可以创建一个临时.command包装文件open。像这样(未经测试):
with tempfile.NamedTemporaryFile(suffix='.command') as f:
f.write('#!/bin/sh python bb.py ')
subprocess.call(['open', '-W', f.name])
另外,您可以明确地告诉open使用Termina