我尝试在远程计算机上运行多个命令,然后在该终端上执行ssh,然后在其终端上运行命令。
我想使用子进程来完成这项工作。所以我写了以下命令: -
import subprocess
process = subprocess.Popen(['ssh', 'rahul@172.20.70.121'], shell=False, stdin=subprocess.PIPE)
现在我得到了远程机器的终端,并传递了以下命令,该命令在该机器上执行: -
print process.communicate('python test.py /home/rahul/vPath-dissector')
但是当我再次调用最后一个被调用的命令时,它会出错: -
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
那么我可以用什么命令发送多个命令而不关闭文件???
答案 0 :(得分:2)
试图找到同一问题的答案,我最终使用pexpect而不是子进程。
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。
答案 1 :(得分:0)
由于您明确询问了subprocess.Popen,因此不确定这是否对您有用 - 仍然可以使用
从shell执行远程命令ssh rahul@172.20.70.121 python test.py /home/rahul/vPath-dissector
当然还有来自python的
os.system("ssh rahul@172.20.70.121 python test.py /home/rahul/vPath-dissector")
您还可以捕获此命令的输出。
很抱歉,如果我错过了你的观点,不过......
答案 2 :(得分:0)