Python 2.7 使用Python的SSH上的Mkdir不起作用

Python 2.7 使用Python的SSH上的Mkdir不起作用,python-2.7,ssh,pexpect,Python 2.7,Ssh,Pexpect,我正在尝试使用python脚本通过SSH创建一个新的目录。当我使用Python命令行尝试我的命令时,它就工作了。但是,当我尝试通过脚本执行相同操作时,它不会创建新的“test”文件夹(我甚至会将脚本中的命令复制/粘贴到Python cmd中,以验证它们是否正确并且在那里工作)。那么,你知道为什么它不能通过脚本工作吗 使用的代码: child = pexpect.spawn('ssh 192.168.56.101 -oStrictHostKeyChecking=no') child.expect=

我正在尝试使用python脚本通过SSH创建一个新的目录。当我使用Python命令行尝试我的命令时,它就工作了。但是,当我尝试通过脚本执行相同操作时,它不会创建新的“test”文件夹(我甚至会将脚本中的命令复制/粘贴到Python cmd中,以验证它们是否正确并且在那里工作)。那么,你知道为什么它不能通过脚本工作吗

使用的代码:

child = pexpect.spawn('ssh 192.168.56.101 -oStrictHostKeyChecking=no')
child.expect=('password:')
child.sendline('MyPwd')
child.sendline('mkdir /home/myUser/Desktop/test')

当我添加另一行时,似乎可以工作

比如说

child.sendline('\n')
所以整个脚本是

child = pexpect.spawn('ssh 192.168.56.101 -oStrictHostKeyChecking=no')
child.expect=('password:')
child.sendline('MyPwd')
child.sendline('mkdir /home/myUser/Desktop/test')
child.sendline('\n')

我通常做什么来解决这个问题是同步主机。在我向机器发送一些东西之后,我希望得到一个答案,通常会在机器的提示中翻译出来。所以,在你的情况下,我会选择这样的方式:

child = pexpect.spawn('ssh 192.168.56.101 -oStrictHostKeyChecking=no')
child.expect('password:')
child.sendline('MyPwd')
child.expect('YourPromptHere')
child.sendline('mkdir /home/myUser/Desktop/test')
child.expect('YourPromptHere')
如果在单个目标上运行脚本,或者使用正则表达式(例如“(\$)|(#”)|(>”),则可以使用计算机的提示替换yourpromphere


tl;dr:为了总结我所说的,您需要等待上一个操作完成,直到发送一个新的操作。

除了您可以用于pxssh模块之外,这扩展了pexpect.spawn以专门设置SSH连接。child.sendline()它负责处理新行。感谢您的回复。我现在正在运行一个命令,它需要一段时间来处理,并且输出存储在一个外部文件中。现在的问题是,当我抛出新的child.sendline()时,它会立即接受该child.sendline()并中断前面的命令。有没有办法告诉它在使用下一个sendline()命令之前等待/休眠,或者我需要pxssh模块来完成这个任务?确定您使用child.prompt(None)和send命令child.sendline(“ls”)