在新的终端窗口中从python执行终端命令?

在新的终端窗口中从python执行终端命令?,第1张

在新的终端窗口中从python执行终端命令?

通常,无法从shell进行此 *** 作。您需要做的是运行终端程序本身,或者运行一些适合您的启动程序。对于每个终端程序,执行此 *** 作的方法都不同。

在某些情况下,

os.startfile
可以做您想做的事情,但这并不是通用的。

另外,请注意,一般来说,您实际上需要脚本的绝对路径,因为新的终端窗口将运行新的Shell,因此不一定具有相同的工作目录。但对于示例,我将忽略它。


使用Windows
cmd,最简单的方法是

start
shell命令。如果您使用的
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/shnpython bb.pyn')    subprocess.call(['open', '-W', f.name])

另外,您可以明确地告诉

open
使用Terminal.app,如下所示:

subprocess.call(['open', '-W', '-a', 'Terminal.app', 'python', '--args', 'bb.py'])

或者,您可以通过AppleEvents编写Terminal.app脚本。例如:

appscript.app('Terminal').do_script('python bb.py')

“执行脚本”事件将打开一个新窗口,并将其参数作为命令运行。如果要进行更详细的控制,请在Applescript编辑器中打开脚本字典,然后查看所有您可以做的有趣的事情。


在Linux或其他* nix系统上……那么,共有65102种不同的桌面环境,启动器和终端程序。您需要对所有这些进行研究吗?

使用gnome-terminal,只需再次运行终端即可为您提供一个新窗口,并且该

-x
参数可让您指定初始命令,因此:

subprocess.call(['gnome-terminal', '-x', 'python bb.py'])

许多较旧的终端都尝试与兼容

xterm
,后者与兼容
-e
,因此:

subprocess.call(['xterm', '-e', 'python bb.py'])subprocess.call(['rxvt', '-e', 'python bb.py'])

…等等

您如何知道用户正在使用哪个终端?好问题。您可以从父辈那里走过去,直到找到看起来像终端的东西。或者您可以假设每个人都拥有

xterm
。或者,您可以查看各种发行版如何配置默认终端并搜索所有终端。要么…



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5673794.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存