首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用subprocess.Popen向远程shell发送多个输入

如何使用subprocess.Popen向远程shell发送多个输入
EN

Stack Overflow用户
提问于 2011-09-30 11:49:36
回答 3查看 3.9K关注 0票数 2

在对一台远程计算机执行ssh之后,我尝试在该计算机上运行多个命令,然后在其终端上运行命令。

我想使用子进程来完成这项工作。所以我写了下面的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import subprocess
process = subprocess.Popen(['ssh', 'rahul@172.20.70.121'], shell=False, stdin=subprocess.PIPE)

现在我获取远程机器的终端,并传递以下命令,该命令在该机器上执行:-

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print process.communicate('python test.py /home/rahul/vPath-dissector')

但是当我再次调用最后调用的命令时,它给出了一个错误:-

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print process.communicate('python temp.py /home/rahul/vPath-dissector')
   Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "/usr/lib/python2.6/subprocess.py", line 690, in communicate
   self.stdin.write(input)
   ValueError: I/O operation on closed file

那么,我可以使用什么命令在不关闭文件的情况下发送多个命令呢?

EN

回答 3

Stack Overflow用户

发布于 2012-03-31 20:45:56

为了找到相同问题的答案,我最终使用了pexpect而不是subprocess。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pexpect

ssh = pexpect.spawn('ssh rahul@172.20.70.121')

prompts = [">", "#", "\$", "}", '%', pexpect.TIMEOUT]
ssh.sendline('echo Hello')
ssh.expect(prompts)
print ssh.before

对于特定的ssh,甚至还有pxssh

票数 2
EN

Stack Overflow用户

发布于 2011-09-30 11:54:22

我不确定这对您是否有用,因为您明确地请求了subprocess.Popen -不过,您仍然可以简单地使用以下命令从外壳程序执行远程命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ssh rahul@172.20.70.121 python test.py /home/rahul/vPath-dissector

当然还有来自python的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
os.system("ssh rahul@172.20.70.121 python test.py /home/rahul/vPath-dissector")

您还可以捕获此命令的输出。

如果我没听懂你的意思,很抱歉...

票数 0
EN

Stack Overflow用户

发布于 2011-09-30 12:28:44

几年前,当我遇到类似的问题时,我最终使用了Python Cookbook中的这个recipe。显然,它现在也可以从Pypi获得,但我不知道它是不是完全相同的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7609918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文