2016-07-28 68 views
0

蟒蛇Pexpect的我使用Pexpect的创建简单的Python脚本另一台服务器上的SSH找到文件,创建使用无法使用在Linux上使用

CurrentCommand = "ssh " + serverRootUserName + "@" + serverHostName 
child = pexpect.spawn(CurrentCommand) 

现在我正在像LS-一个或一些命令一个spwan过程“找到的/ opt /许可/ -name‘* .XML’” 使用代码

child.run(mycommand) 

如果它工作正常运行,从Pycharm但如果从终端中运行它不工作就无法找到任何文件,我认为它正在研究我的本地系统。

任何人都可以给我一些建议。谢谢

回答

0

作为一个建议,看看paramiko库(或结构,它使用它,但有一个特定的目的),因为这是一个ssh的Python接口。它可能会使您的代码更好,更有弹性,抵御错误或攻击。

但是,我认为问题来自您使用run

该函数运行给定的命令;等待它完成;然后将所有输出作为字符串返回。输出中包含STDERR。如果没有给出命令的完整路径,则搜索该路径。

你应该看看的是'期望'。即与spawn你重生,那么你应该使用expect等待,要得到一个适当的点(如连接,终端就绪后MOTD推等(因为ouy可能要投入等用户名和密码)。

然后要运行sendline一条线发送到程序见例如:

http://pexpect.readthedocs.io/en/latest/overview.html

希望帮助,并认真,看看的paramiko;)

+0

我用这个已经,但它是。不工作child.sendline('mycommand')后跟 child.expect('prompt:') –

+0

您应该期待*然后*发送线路:基本上,您必须等待ssh连接,然后才能尝试将更多数据添加到它。我惊讶地发现ssh不会要求用户名和密码(除非你使用ssh密钥,但是你最好使用-i参数在原始的ssh连接上指定你的密钥。您开始的过程 - 它更多用于运行脚本 – Jmons

+0

我没有在这里写完整的代码,我运行了命令child = pexpect.spawn(CurrentCommand)并提供了密码,所以我现在有了子对象,它是如果我从unix终端的child.sendline(找到/ opt/license/-name'* .xml')后跟child.expect('prompt:'),它不显示数据,来自Pycharm正在工作,它看起来像从我运行python脚本文件的位置查看我的本地服务器,例如[email protected] mypyhton.py –