使用参数启动 gnome-terminal

Posted

技术标签:

【中文标题】使用参数启动 gnome-terminal【英文标题】:Starting gnome-terminal with arguments 【发布时间】:2011-06-05 17:54:32 【问题描述】:

使用 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。

【问题讨论】:

【参考方案1】:
$ gnome-terminal --help-all

 ...

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

 ...

如果您希望窗口保持打开,那么您需要运行一个 shell 或命令以使其在之后保持打开状态。

【讨论】:

【参考方案2】:
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>

【讨论】:

【参考方案3】:

这是我用来在 WINE 中从 notepad++ 启动 gnome 终端的系统,

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

【讨论】:

以上是关于使用参数启动 gnome-terminal的主要内容,如果未能解决你的问题,请参考以下文章

Android:使用参数启动服务

Selenium使用ChromeOptions启动参数

使用内联参数启动 Snappydata

CreateProcess 不会使用参数启动进程

带参数启动程序

调试时如何使用参数启动程序?