我正在尝试编写一个打开新终端的脚本,然后从该终端运行一个单独的python脚本。
我试过了:
os.system("gnome-terminal 'python f.py'")
和
p = Popen("/usr/bin/gnome-terminal", stdin=PIPE)
p.communicate("python f.py")
但这两种方法只打开一个新终端而不运行f.py
。我如何打开终端并运行单独的脚本?
编辑:
我想打开一个新的终端窗口,因为f.py
是一个运行serve_forever()
的简单服务器。我希望原始终端窗口能够“免费”运行其他命令。
答案 0 :(得分:2)
与大多数终端一样,gnome终端需要options来执行命令:
gnome-terminal [-e, --command=STRING] [-x, --execute]
您可能需要添加-x
选项:
x, - execute
执行终端内部命令行的其余部分。
这样:
os.system("gnome-terminal -x python f.py")
除非您将&
添加到命令行BTW,否则不会在后台运行您的流程。
communicate
尝试需要输入换行符,但也应该有效,但是像终端这样的复杂流程不会像#34;"被重定向。这似乎是向后使用交互式工具。
而且,这将阻止直到终止。 的工作原理是使用p.stdin.write("python f.py\n")
来控制python脚本。但在这种情况下,它不太可能奏效。
所以看起来你甚至不需要python做你想要的。你只需要运行
python f.py &
在一个shell中。
答案 1 :(得分:1)
以下是如何使用subprocess.call
使用argparse
正确解析输入来调用可执行python文件的完整示例。
目标流程将打印您的给定输入。
要调用的python文件:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--file", help="Just A test", dest='myfile')
args = parser.parse_args()
print args.myfile
您的调用python文件:
from subprocess import call
#call(["python","/users/dev/python/sandboxArgParse.py", "--file", "abcd.txt"])
call(["gnome-terminal", "-e", "python /users/dev/python/sandboxArgParse.py --file abcd.txt"])
仅供参考: 您可能不需要python调用另一个python脚本来运行带有进程的终端窗口,但可以执行以下操作:
gnome-terminal -e "python /yourfile.py -f yourTestfile.txt"
答案 2 :(得分:1)
以下代码将打开一个新终端并执行该过程:
process = subprocess.Popen(
"sudo gnome-terminal -x python f.py",
stdout=subprocess.PIPE,
stderr=None,
shell=True
)
答案 3 :(得分:-1)
截至GNOME Terminal 3.24.2 Using VTE version 0.48.4 +GNUTLS -PCRE2
不建议使用选项-x,并且可以在更高版本的gnome-terminal中将其删除。 使用“-”终止选项,并在命令行之后执行。
因此首选语法似乎是
gnome-terminal -- echo hello
而不是
gnome-terminal -x echo hello