首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >paramiko不适用于批处理脚本中的start cmd.exe "application.exe“命令。

paramiko不适用于批处理脚本中的start cmd.exe "application.exe“命令。
EN

Stack Overflow用户
提问于 2022-11-17 13:53:24
回答 1查看 39关注 0票数 -2

我在试着从paramiko ssh运行一个批处理脚本。

批处理脚本如下所示:

代码语言:javascript
运行
复制
start cmd.exe /k "cd C:\\Users\\Administrator\\iometer\\ && C:\\Users\\Administrator\\iometer\\IOmeter.exe /c C:\\Users\\Administrator\\iometer\\new_config.icf /r C:\\Users\\Administrator\\iometer\\iometer_result_v.csv"

如果我在本地运行批处理脚本,它可以工作,但是当我从paramiko exec_command()触发相同的批处理脚本时,它不会启动IOMeter.exe应用程序。

  1. ,我尝试给出相对路径,然后给出绝对路径。
  2. 我尝试从exec_command()本身运行整个批处理脚本命令,甚至没有在远程计算机中启动应用程序.

EN

回答 1

Stack Overflow用户

发布于 2022-11-18 06:49:15

问题是,如果我们在paramiko中使用exec_command运行任何批处理脚本,它会执行命令并立即终止会话和由该exec_command会话打开的所有依赖会话(或子会话)。

要解决此问题,可以从powershell触发相同的批处理脚本,并在末尾添加等待。或者创建一个PowerShell脚本(temp.ps1)并添加命令,将批处理脚本作为一个进程运行。

示例批处理文件如下所示(为了安全考虑,我在这里使用记事本,但实际上我正在运行一个工具,它在不同磁盘上并行运行IO压力,并将输出记录到文件中)

代码语言:javascript
运行
复制
start cmd.exe /k \"cd C:\\Users\\Administrator\\automate && C:\\Users\\Administrator\\automate\\notepad.exe &exit"
start cmd.exe /k \"cd C:\\Users\\Administrator\\automate && C:\\Users\\Administrator\\automate\\notepad.exe &exit"
start cmd.exe /k \"cd C:\\Users\\Administrator\\automate && C:\\Users\\Administrator\\automate\\notepad.exe &exit"

示例powershell脚本如下所示:

代码语言:javascript
运行
复制
start-process 'cmd.exe' -ArgumentList "/c C:\\Users\\Administrator\\automate\\temp_batch.bat &exit" -Wait

总之,我们有一个批处理脚本和一个powershell,将批处理脚本作为一个进程运行。在python中,只需使用paramiko exec_command运行这个powershell脚本。

代码语言:javascript
运行
复制
cmd = "powershell -file C:\\Users\\Administrator\\automate\\temp3.ps1"

示例python脚本如下所示:

代码语言:javascript
运行
复制
import paramiko
hostname = 'x.x.x.x'
port = 22
username = 'user'
password = 'pwd'
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname,port,username,password)
cmd = "powershell -file C:\\Users\\Administrator\\diskio\\temp3.ps1"
stdin,stdout,stderr=ssh.exec_command(cmd)
outlines=stdout.readlines()
result=''.join(outlines)
print (result)
print(stderr.readlines())
ssh.close()
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74476660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档