在 python 中执行 bash 脚本

2024-01-20

我创建了一个 Expect 脚本,执行时,它会通过 ssh 连接到服务器并执行一系列命令。伪代码如下所示:

#!/usr/bin/expect
spawn ssh usr@myip
expect "password:"
send "mypassword\n";
send "./mycommand1\r"
send "./mycommand2\r"
interact

当从 bash shell ($ ./myscript.txt) 执行时,代码执行良好。我现在想做的是在 python 文件中添加一行,以与 bash shell 相同的方式运行脚本中的命令。伪代码如下所示:

import subprocess
def runmyscript():
    subprocess.call("myscript.txt", executable="expect", shell=True)
def main():
    run = runmyscript():
if __name__ == '__main__': main()   

我已将 myscript.txt 脚本文件放在与 runmyscript.py 文件相同的目录中,但是当我运行 python 文件时,我收到错误:

WindowsError: [Error 2] The system cannot find the file specified

我已经读过python.org 网站上的文档 http://docs.python.org/library/subprocess.html,但无济于事。有谁有一个巧妙的解决方案可以从 .py 代码中执行 bash 脚本吗?

解决方案:这段代码对我有用。

child = subprocess.Popen(['bash', '-c', './myscript.txt'], stdout = subprocess.PIPE)

使用此代码调用 Expect 文件进行 ssh 并从 .py 文件向服务器发送命令 - 如果您在计算机上构建 pycrypto/paramiko 时遇到问题,这是有用的解决方案。


这是您的期望脚本的 python 实现:

import paramiko

user = "user"
pass = "pass"
host = "host"

client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(host, port=22, username=user, password=pass)
client.exec_command("./mycommand1")
client.exec_command("./mycommand2")
client.close()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 python 中执行 bash 脚本 的相关文章

随机推荐

  • MySQL远程连接【不正常】

    我无法从外部访问 mysql 我认为这是 mysql 或防火墙的东西或 mysql 中的某些特权 我已经尝试执行互联网上的步骤 我将逐步介绍该过程 以举例说明我正在做的事情 并为其他遇到同样问题的人提供教程 我在用着 ubuntu serv
  • pyinstaller可执行文件的差异更新(修改嵌入的PYZ-00.pyz)

    我计划创建一个巨大的可执行目录并将其安装在某些设备上 想象一下 后来我发现我的 python 模块中有一个错误 有没有办法只传输 复制修改后的字节码 并用新的字节码替换原始字节码 我想这样做的原因是 在我的上下文中 带宽非常昂贵 我想远程修
  • 大型项目没有 PHP?为什么不? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我读过一些帖子 人们指出 没有建议 没有讨论 没有提供 PHP 不应该用于大型项目 作为一名主要的 PHP 开发人员 我问两个问题 大型项目 的
  • 带有 pod 标签的 Prometheus kubelet 指标 [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我想弄清楚如何使用 prometheus stack 将 pod 标签从 kubelet 指标获取到指标标签 在我们的环境中 我们需要
  • 在 C 中调用函数时的序列点和未定义/未指定的行为

    我试图确定我对 C 中序列点的理解 只是想检查一些东西 目前 我认为 1 是未定义的 而 2 只是未指定的 因为在 2 中 在评估参数后存在序列点g and h 所以我们不修改i序列点之间两次 但是参数的求值顺序f仍然未指定 我的理解正确吗
  • 为什么我的 Azure 存储帐户上的队列域丢失?

    我已使用以下设置在 Azure 上成功创建存储帐户 部署 资源管理器 类型 通用 标准 复制 ZRS 在 Azure 门户上 我可以看到 Blob 服务 如果单击它 我可以在 blob 域下创建 blob 容器 https 帐户名称 blo
  • Javascript字典性能问题

    现在我有以下 javascript 字典 var a a SVG343 1942 a UAL534 2153 右边的数字代表时间 键是唯一的 ID 我想让 id 成为键 因为它们是唯一的 我的问题是给出一个时间找到对应的id 我要如何做到这
  • 将外部域名连接到AWS S3网站

    我想在 Amazon S3 上托管一个静态网站 创建了相关的存储桶 测试它们正常 现在我已经在 EuroDNS 注册了一个域名 www gopropel io 我找不到如何将其连接到我的 AWS S3 存储桶 我需要创建路由 53 托管区域
  • Flutter Firebase Messaging 无法创建服务 io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService

    我正在尝试在 Flutter 应用程序中使用 Firebase Messaging 我遵循包装上的所有说明 在我的 pubspec yaml 中 我有这些包 dependencies flutter sdk flutter firebase
  • 当元素的父元素溢出时,使元素宽度拉伸以适合其子元素:auto;

    在这个简化的示例中 我有一个书柜 书架上放着书籍 书架是具有定义宽度的最外面的元素 书架上的书应该从左到右排列 没有包装 书架应该拉伸其宽度以显示书架上的所有书籍 所有书架的宽度必须相同 即最宽书架的宽度 My HTML div class
  • 保护 Raven 数据库的安全

    我正在尝试将 RavenDB 的访问权限限制为只有一名用户 更改设置以保护数据库后 我仍然可以访问 RavenDB 管理工作室 但我不确定为什么 我将 RavenDB 作为 Windows 服务运行 并且使用构建 573 这是我的 Rave
  • 如何向 Skype 聊天室发出 Jenkins 构建状态警报?

    我们公司使用 Skype 进行通信 我希望能够在 Jenkins 构建失败 以及恢复时 时向 Skype 聊天室发送警报 我怎样才能做到这一点 我已经使用了Skype 公共 API http developer skype com acce
  • C++ 和 Java 之间的低延迟 IPC

    对于以下情况 实现 C Java IPC 的最佳方法是什么 最近有人问类似的问题 https stackoverflow com questions 5900887 ipc between java and c applications 但
  • 将非数组变量的地址传递给声明为“Type ptr[static 1]”的函数参数是否有效?

    如上所述here https stackoverflow com questions 3430315 what is the purpose of static keyword in array parameter of function
  • ESLint 显示括号中的错误

    我的 javascript 代码工作正常 除了 ESLint 显示我有错误 例如 错误 myFunction 已定义但从未使用 no unused vars and 错误 文档 未定义 no undef 这只是一个问题 因为我使用的是外部
  • 如何设置单个单元格而不是事件的背景颜色?

    我不想为圣诞节和复活节等创建事件 而是希望能够为受影响的日期单元格着色 甚至可能为每个事件提供灰色半透明文本 在 FullCalendar 中有什么简单的方法可以做到这一点吗 EDIT 有人向我指出 fc state highlight 用
  • Mysql从管道导入

    我试图弄清楚如何将输出通过管道传输到 mysqlimport 中 但没有任何运气 我有一个巨大的文件 250 GB 我想在处理它后通过管道传输到 mysqlimport 我不想创建中间文件 表 我正在想象这样的事情 猫基因组 mpileup
  • C# 和 Visual Studio 2005 中的程序集之间的循环引用

    我正在努力标准化所有应用程序的分层 多层设计的单一方式 我正在尝试将我的所有应用程序设为 5 层 Code 用户界面 业务对象 或映射器 数据访问 关系型数据库管理系统 假设我正在开发一个具有用户登录 注销功能的应用程序 我正在 VS200
  • Pandas:根据特定列的值计数选择行

    从 panda 数据框中选择所有行的最简单方法是什么 谁的 sym 在整个表中恰好出现两次 例如 在下表中 我想选择 b e 中包含 sym 的所有行 因为这些符号的 value counts 等于 2 df pd DataFrame sy
  • 在 python 中执行 bash 脚本

    我创建了一个 Expect 脚本 执行时 它会通过 ssh 连接到服务器并执行一系列命令 伪代码如下所示 usr bin expect spawn ssh usr myip expect password send mypassword n