我正在用Python编写一个程序,该程序必须通过SSH与物理目标进行通信,并自动将一些命令发送到该目标(用于测试)。
我首先使用Paramiko进行此操作,然后一切都非常完美,直到我必须发送几个命令,并且例如当第二个命令必须在第一个命令的上下文中执行时(例如,第一个命令执行,cd /mytargetRep
第二个命令是./executeWhatIWant
)。我不能exec_command
这样做,因为每个人都exec_command
开始一个新的会话。
我尝试使用带有的通道invoke_shell()
,但是与此相关的另一个问题是:我不知道通过此操作何时结束命令执行。我可以执行一些非常短的(及时的)命令执行,而其他一些实际上要更长一些,因此我需要知道命令执行何时结束。
我知道可以exec_command
与shell逻辑操作(例如&&
或using)一起使用的解决方法;
。例如exec_command("cd /mytargetRep && ./executeWhatIWant")
。但是我不能这样做,因为还必须可以手动执行一些命令(我有一个可以发送命令的极简终端),因此,例如,用户将执行cd /mytargetRep
then./executeWhatIWant
而不是cd /mytargetRep && ./executeWhatIWant
。
所以我的问题是:是否有使用Paramiko在同一SSH会话中发送多个命令并能够知道命令执行结束的解决方案?
谢谢
似乎您想实现一个交互式外壳,但是您需要控制单个命令的执行。仅使用SSH接口是不可能的。SSH中的“
shell”通道是带有输入和输出的黑盒。因此,Paramiko中没有任何东西可以帮助您实现这一目标。
如果您需要确定特定命令何时完成或特定命令的输出在何处结束,则需要使用Shell的功能。
您可以通过在两者之间插入唯一的分隔符(字符串)并在通道输出流中搜索来解决该问题。使用通用的* nix shell可以实现以下效果:
channel = ssh.invoke_shell()
channel.send('cd /mytargetRep\n')
channel.send('echo unique-string-separating-output-of-the-commands\n')
channel.send('./executeWhatIWant\n')
尽管我并不是真的认为您经常需要它。使特定命令正常工作所需的大多数命令(例如cd
或)set
实际上不会输出任何内容。
因此,在大多数情况下,您可以使用SSHClient.exec_command
并且您的代码将更简单,更可靠:
在Paramiko中执行多个命令,以使命令受其前辈的影响
即使您需要使用看起来像su
/的复杂对象sudo
,还是最好坚持使用SSHClient.exec_command
:
使用Python在SSH中使用“ su -l”执行命令
问题内容: 在我的Java程序中,我创建一个执行命令以运行批处理文件的过程,如下所示: 现在,我想发生的是该命令 仅在我调用的批处理文件执行完毕后运行。但是现在,它会在命令提示符打开后立即运行。 我该如何解决? 问题答案: 我设法在其他地方找到答案。要保持初始过程打开,直到批处理文件完成,您需要的是“ / wait”
我在Android Studio中有以下形式的Espresso instrumentaion测试用例。 现在,我想单独运行几个类。 例如:我只想使用gradlew命令运行CrashersTest和EM3AppUtil类,而使用另一个命令运行rest类。 null ./gradlew:app:ConnectedLocalDebugAndroidTest 它运行LocalDebug Variant的所
问题内容: 似乎python支持许多不同的命令来停止脚本执行。 我发现的选择是: ,,, 我错过了吗?它们之间有什么区别?你何时会使用它们? 问题答案: 让我给他们一些信息: 在幕后提出异常。 此外,如果你打印它,它将给出一条消息: 包含此功能是为了帮助不了解Python的人。毕竟,新手尝试退出Python的最有可能的事情之一就是输入quit。 然而,quit应该不是在生产代码中使用。这是因为它仅
问题内容: 我想在我运行的每个bash命令之后打印日期。 这可以帮助我了解远离键盘时要执行多少命令。 我知道我能做 获取日期,但我不知道在bash上执行的每个命令之后如何甚至是否可以运行此命令。 我也会对在每个命令 之前 运行同一命令感兴趣,因此我可以知道一个命令花费了多长时间。 可能吗? 我应该编辑什么文件? 例如: 如果我也可以介绍以下功能,我将很高兴: 第一个日期是我运行程序的日期,第二个是
问题内容: 我想做这样的事情,我可以依次运行多个命令。 问题答案: 想通了,使用 。 例: 多行中的相同示例: 要么:
问题内容: 我试图在一行中合并多个Linux命令以执行部署操作。例如 问题答案: 如果仅在上一个命令成功的情况下才执行每个命令,请使用运算符将它们组合: 如果其中一个命令失败,则将不执行其后的所有其他命令。 如果要执行所有命令而不管先前的命令是否失败,请使用分号将它们分开: 在您的情况下,我想您希望第一种情况下,下一条命令的执行取决于上一条命令的成功。 您还可以将所有命令放在脚本中,然后执行该脚本