2011-01-08 3 views
3

Используя Python, я хотел бы начать процесс в новом окне терминала, так как показать пользователю, что происходит, и поскольку задействовано более одного процесса.Запуск gnome-terminal с аргументами

Я попытался сделать:

>>> import subprocess 
>>> subprocess.Popen(['gnome-terminal']) 
<subprocess.Popen object at 0xb76a49ac> 

и это работает, как я хочу, открывается новое окно.

Но как передать аргументы? Например, когда терминал запускается, я хочу, чтобы он сказал, запустите ls. Но это:

>>> subprocess.Popen(['gnome-terminal', 'ls']) 
<subprocess.Popen object at 0xb76a706c> 

Это снова работает, но команда ls не: начинается пустое окно терминала.

Так что я задаю вопрос, как запустить окно терминала с указанной командой, чтобы команда запускалась при открытии окна.

PS: Я нацелен только Linux.

ответ

5
$ gnome-terminal --help-all 

... 

    -e, --command     Execute the argument to this option inside the terminal 

... 

Если вы хотите, чтобы окно пребывания открыт, то вам нужно запустить оболочку или команду, которая держит его открытым после этого.

5
In [5]: import subprocess 

In [6]: import shlex 

In [7]: subprocess.Popen(shlex.split('gnome-terminal -x bash -c "ls; read -n1"')) 
Out[7]: <subprocess.Popen object at 0x9480a2c> 
0

это система, которую я использую для запуска гном-терминал из блокнота ++ в WINE,

1: команда Notepad ++ для запуска

#!/usr/bin/python 
#this program takes three inputs::: 
#$1 is the directory to change to (in case we have path sensitive programs) 
#$2 is the linux program to run 
#$3+ is the command line arguments to pass the program 
# 
#after changing directory, it launches a gnome terminal for the new spawned linux program 
#so that your windows program does not eat all the stdin and stdout (grr notepad++) 

import sys 

import os 
import subprocess as sp 

dir = sys.argv[1] 
dir = sp.Popen(['winepath','-u',dir], stdin=sp.PIPE, stdout=sp.PIPE).stdout.read()[:-1] 

os.chdir(os.path.normpath(os.path.realpath(dir))) 
print os.getcwd() 

print "running '%s'"%sys.argv[2] 
cmd=['gnome-terminal','-x','run_linux_program_sub'] 
for arg in sys.argv[2:]: 
    cmd.append(os.path.normpath(os.path.realpath(sp.Popen(['winepath','-u',arg], stdin=sp.PIPE, stdout=sp.PIPE).stdout.read()[:-1]))) 
print cmd 
p = sp.Popen(cmd, stdin=sp.PIPE, stdout=sp.PIPE) 

2: запустить суб сценарий, который я использовать для запуска bash после завершения моей программы (обычно питон в этом случае)

#!/bin/sh 
#$1 is program to run, $2 is argument to pass 
#afterwards, run bash giving me time to read terminal, or do other things 
$1 "$2" 
echo "-----------------------------------------------" 
bash 
Смежные вопросы