如何在python中与终端交互

如何在python中与终端交互,python,terminal,subprocess,Python,Terminal,Subprocess,我正在写一个小剧本。脚本应打开3个终端,并与这些终端独立交互 我非常理解,子流程是实现这一点的最佳方式。到目前为止我所做的: # /usr/bin/env python import subprocess term1 = subprocess.Popen(["open", "-a", "Terminal"], stdin=subprocess.PIPE, stdout=subprocess.PIPE) term1.communicate(input="pwd") 我的问题是我无法与新的终端交

我正在写一个小剧本。脚本应打开3个终端,并与这些终端独立交互

我非常理解,子流程是实现这一点的最佳方式。到目前为止我所做的:

# /usr/bin/env python
import subprocess

term1 = subprocess.Popen(["open", "-a", "Terminal"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
term1.communicate(input="pwd")
我的问题是我无法与新的终端交互。此部件
term1.通信(input=“pwd”)
不工作。我无法向新终端发送命令。我还尝试了
term1.communicate(input=“pwd\n”)
,但什么也没发生

你知道我该怎么做吗


另外,我正在使用Mac操作系统

您可以同时运行这两个命令,而无需打开终端

import subprocess
process1 = subprocess.Popen(["ls", "-l"])
process2 = subprocess.Popen(["ls", "-l"])
如果您运行该代码,您将看到该目录被列出两次,交错在一起。您可以根据自己的具体需要扩展此功能:

tcprelay1 = subprocess.Popen(["tcprelay", "telnet"])
tcprelay2 = subprocess.Popen(["tcprelay", "--portoffset [arg1] [arg2]")

您真的需要为您要完成的任务打开一个新的终端吗,还是只需要运行
pwd
并捕获输出?另外,
通信
会等待过程完成,终端通常在关闭后才会退出,所以它什么也不做是有道理的。@user2085282在我的例子中,我必须运行两个命令:“sudo tcprelay telnet”和“tcprelay--portoffset[arg1][arg2]”,但问题是,如果我在不打开新终端的情况下运行其中一个命令,在第一个命令完成/终止之前,我将无法运行第二个命令。这就是我为什么使用这个解决方案的原因只是有点头晕,你不想在你的脚本中使用sudo。相反,请使用
os.getuid()==0检查您是否具有提升的权限,并以正常方式运行该命令。问题是我必须在tcprealy1中使用“sudo”commannd,并且必须与此通信。然后您必须使用sudo运行python脚本,并且要小心。。。您仍然可以与流程进行通信,我只是忽略了这一部分。