Запуск gnome-терминала с аргументами - PullRequest
3 голосов
/ 08 января 2011

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

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

>>> 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.

Ответы [ 3 ]

5 голосов
/ 08 января 2011
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>
5 голосов
/ 08 января 2011
$ gnome-terminal --help-all

 ...

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

 ...

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

0 голосов
/ 08 января 2011

это система, которую я использую для запуска терминала gnome из notepad ++ в 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 после выхода из моей программы (обычно в данном случае python)

#!/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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...