Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不使用单独的文件从Python调用'expect'_Python_Ssh_Expect - Fatal编程技术网

不使用单独的文件从Python调用'expect'

不使用单独的文件从Python调用'expect',python,ssh,expect,Python,Ssh,Expect,我有以下expect文件,我想将其嵌入python脚本中。目前,它是我从python脚本中调用的独立文件,但我想合并这两个文件: do_remote.sh #/usr/bin/expect 生成ssh-i priv.keyuser@ip触摸测试.txt 预期“输入密钥'priv.key'的密码短语:” 发送“\n” 互动 调用远程.py 导入操作系统 ... 操作系统(“./do_remote.sh”) ... 我不能使用标准python中未包含的任何库(如Paramiko或Pexpect)

我有以下expect文件,我想将其嵌入python脚本中。目前,它是我从python脚本中调用的独立文件,但我想合并这两个文件:

do_remote.sh

#/usr/bin/expect
生成ssh-i priv.keyuser@ip触摸测试.txt
预期“输入密钥'priv.key'的密码短语:”
发送“\n”
互动
调用远程.py

导入操作系统
...
操作系统(“./do_remote.sh”)
...
我不能使用标准python中未包含的任何库(如Paramiko或Pexpect)


我不需要显式地使用ssh命令的输出(但这很好)。为了清楚起见,我只想有1个源代码文件,而不是2个。我可以使用
os.system()

这不是一个真正的bash文件,作为该文件的第一行:

#!/usr/bin/expect
实际上,声明口译员是预期的。 不要尝试从python中运行shell文件,而是尝试启动expect并提供expect文件作为参数:

os.system('/usr/bin/expect do_remote.sh')

您可以在命令行上使用
Expect-c
指定Expect脚本:

import subprocess

subprocess.call(["expect", "-c", """
    spawn ssh -i priv.key user@ip touch test.txt
    expect "Enter passphrase for key 'priv.key':"
    send "<passphrase>\\n"
    interact;
    """])
导入子流程
子进程调用([“expect”、“-c”、“”“
生成ssh-i priv.keyuser@ip触摸测试.txt
预期“输入密钥'priv.key'的密码短语:”
发送“\\n”
互动
"""])

您希望摆脱哪种依赖关系?希望是ssh,还是两者都有?(注:这里没有任何bash文件。
do_remote.sh
是用TCL编写的Expect脚本)我不想使用任何第三方python库您的代码中没有使用任何第三方python库,因此。。。任务完成了吗?我想用python实现代码,而不仅仅是运行pythonThen中的expect文件。不,这是不现实的。您需要SSH的Python实现,这是一项相当大的任务。不过,您可以将第三方ssh库与代码捆绑在一起,这样就不需要在目标机器上安装任何东西