我想在python中打开一个bash会话并继续与它进行交互,就像它是一个终端一样。这就是我到目前为止所做的:
import subprocess as s
class Session:
proc = None
def execute(self, cmd):
if self.proc is None:
self.proc = s.Popen("/bin/bash", shell=True, stdin=s.PIPE, stdout=s.PIPE, stderr=s.STDOUT)
cmd = cmd + ' ; echo EOF\n'
self.proc.stdin.write(cmd.encode())
output = ''
while not output.endswith("EOF"):
output += self.proc.stdout.read(1).decode()
return output
sess = Session()
sess.execute("export MY_VAR=HELLO")
sess.execute("git clone https://github.com/internetsadboy/crapi.git")
然而,在git clone期间,我得到了这个输出,但它失败了
Cloning into 'crapi'...
EOF
答案 0 :(得分:-1)
好的,完全免责声明,python可能是我的第一语言,但肯定是我最好的
这应该让你开始:
self.execute("/bin/bash")#spawn a bash session
之后,您可以将命令管道化为bash。我不完全确定您要实现的目标,但您可以在此处使用文档管道: https://docs.python.org/2/library/subprocess.html#subprocess.check_call
快速实验证明这一点有效: 转到你的bash终端 执行
echo "echo test" | /bin/bash
和结果?
test
不是
echo test