Python 在新终端中运行辅助脚本

Python 在新终端中运行辅助脚本,python,Python,运行辅助python脚本时: 是否可以在新终端中运行子进程.Popen,或子进程.call或甚至execfile?(与运行脚本的当前终端不同的终端) 或者,如果在运行我的程序(main)之前,我首先打开了两个终端,那么我可以将辅助脚本指向第二个终端吗?(以某种方式获取打开终端的ID,然后使用其中的特定终端来执行子流程) 例如,应该首先调用要运行的两个子流程,first.py,然后才调用第二个子流程,second.py。因为两个脚本first.py和second.py是相互依赖的(就像firs

运行辅助python脚本时:

  • 是否可以在新终端中运行
    子进程.Popen
    ,或
    子进程.call
    或甚至
    execfile
    ?(与运行脚本的当前终端不同的终端)
  • 或者,如果在运行我的程序(main)之前,我首先打开了两个终端,那么我可以将辅助脚本指向第二个终端吗?(以某种方式获取打开终端的ID,然后使用其中的特定终端来执行子流程)
例如,应该首先调用要运行的两个子流程,
first.py
,然后才调用第二个子流程,
second.py
。因为两个脚本
first.py
second.py
是相互依赖的(就像
first.py
进入等待模式,直到运行
second.py
,然后
first.py
恢复,我不知道如何使它们之间的通信在子进程方面工作。)

框架(Ubuntu,python 2.7)

如果您正在使用,您可以指定要在哪个目标中运行命令:

tmux send -t foo.0 ls ENTER
因此,如果您已经创建了一个tmux会话
foo.0
,您应该能够:

my_command = 'ls'
tmux_cmd = ['tmux', 'send', '-t', 'foo.0', my_command]
p = subprocess.Popen(tmux_cmd)

您可以指定要在其中执行命令的终端窗口的
tty

ls > /dev/ttys004

但是,我建议使用tmux方法来获得更好的控制(请参阅我的另一个答案)。

我想您需要类似这样的方法

subprocess.call(['xterm','-e','python',script])
好的旧
xterm
几乎没有任何装饰;在Freedesktop系统上,可以运行
xdg terminal
。在Debian上,尝试


然而,使您的程序需要X11在大多数情况下是错误的。更好的解决方案是运行子流程,并将输出输出到日志文件(或套接字,或其他),然后分别在这些文件上运行
tail-f
(在不同的终端中,或通过
ssh
从不同的服务器运行,或将输出输出到支持
rsyslog
的记录器,或…)它使您的程序简单、模块化,不受“方便”依赖性的影响。

您所说的“在新的终端中”是什么意思?你想做什么?你链接到的问题与终端窗口无关。你想做什么?@DisplayName我正在尝试类似于
subprocess.Popen(command,stdout=subprocess.PIPE,stderr=subprocess.stdout,creationflags=subprocess.CREATE\u NEW\u CONSOLE)
where
command=[“python”,“test.py”]
但我得到了“'module'对象没有属性‘CREATE\u NEW\u CONSOLE’”。显然,CREATE_NEW_控制台仅适用于Windows请回答您的问题并在那里添加代码。相关:(考虑提供GUI,或者使用
x-terminal-emulator
)感谢您的建议,很遗憾,我没有使用tmux。有没有其他选择?很遗憾,创建新的控制台不是一个选项,因为这只适用于windows机器。谢谢,我想我非常赞同你的建议,很棒的东西。两个终端都打开,脚本开始运行,但我现在如何监控它们的输出,
output=p.stdout.readline().strip()
似乎不再工作了,因为现在它们位于不同的终端中。更有用的方法可能是启动一个简单的程序,在不同的终端中接收并打印主程序的输出,甚至只需登录到一个文件,并在单独的终端上对日志文件运行常规的
tail-f
。哦,我明白了,听起来很合理!既然子流程p在xterm中,我如何接收它的输出?不要在
xterm
中运行子流程。关键是要让它在xterm中工作。。。因为我希望子流程位于不同的终端。
subprocess.call(['xterm','-e','python',script])