在新终端

时间:2016-04-14 13:06:20

标签: python

运行辅助python脚本时:

  • 是否可以在新终端中投放subprocess.Popensubprocess.call甚至execfile? (例如,与运行脚本的当前终端不同的终端)。
  • 或者,如果在运行我的程序(main)之前,我首先打开两个终端,然后我可以将辅助脚本指向第二个终端吗? (以某种方式获取打开的终端的ID,然后使用其中的特定的ID来执行子进程)。

一个例子,要运行两个子进程,首先应调用first.py,然后再调用第二个子进程second.py。因为两个脚本first.pysecond.py是相互依赖的(如first.py进入等待模式,直到second.py运行,然后first.py恢复,我不会我不知道如何在子流程方面使这种沟通在它们之间发挥作用。)

import subprocess

command = ["python", "first.py"]
command2 = ["python", "second.py"]
n = 5
for i in range(n):
    p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    p2 = subprocess.Popen(command2, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    while True:
        output = p.stdout.readline().strip()
        print output
        if output == 'stop':
            print 'success'
            p.terminate()
            p2.terminate()
            break

Framework(Ubuntu,python 2.7)

3 个答案:

答案 0 :(得分:1)

如果您正在使用tmux,则可以指定要在其中运行命令的目标:

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)

答案 1 :(得分:1)

我想你想要像

这样的东西
subprocess.call(['xterm','-e','python',script])

好老xterm几乎没有多余的装饰;在Freedesktop系统上,可能会运行xdg-terminal。在Debian上,尝试x-terminal-emulator

但是,在大多数情况下,使程序需要X11是一个错误。更好的解决方案是将输出运行到日志文件(或套接字等)的子进程运行,然后分别在这些文件上运行tail -f(在不同的终端中,或从{{1}以外的其他服务器运行}或者输出到支持ssh或或或...的记录器,这使得程序简单和模块化,没有“方便”依赖。

答案 2 :(得分:0)

您可以指定希望执行命令的终端窗口的tty

ls > /dev/ttys004

但是,我建议采用tmux方法进行更好的控制(参见我的其他答案)。