命令行中命令的变量

时间:2017-04-14 05:13:07

标签: windows python-2.7 openssh

我正在使用Python 2.7和Paramiko模块2.1.2来针对运行OpenSSH的Windows服务器自动执行某些任务(没有完整的Cygwin安装)。我有工作代码,但我正在尝试增强它。 (希望我在匿名时不会破坏它。)

我正在尝试做的是增强代码,以便我可以用变量替换部分“stdin.write”行。对于我的* Nix主机,我刚做了类似的事情:

my_linux_var = "/FooBar/barFoo/log"
my_linux_cmds = "cd " + my_linux_var + "\n" + \
                "more instructions, blah, blah" + "\n"
stdin.write(my_linux_cmds)

虽然它很丑,但它确实有效。但是,相同的技术不适用于我的Windows主机。以上述方式发送命令会让我进入shell。我可以通过将反斜杠更改为斜杠来导航,但我还没有找到绕过Windows变量的方法。虽然我没有得到错误,但shell似乎没有分配或可能检索变量。例如,

PUB1 = “真” echo%Publ%

导致“%Pub1%”被回应。我的问题有哪些可能的解决方案,在* Nix环境中有更好的方法可以解决这个问题吗?

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("10.9.8.7", username="user", password="passwd")
channel = ssh.invoke_shell()
stdin = channel.makefile('wb')
stdout = channel.makefile('rb')
stdin.write('''
E:
cd E:\Foo\bar\log
for /f %c in ('E:\Foo\bar\bin\somecmd -readparams /LogManagement/EnablePublish1') do set Pub1=%c
if exist %COMPUTERNAME%_Bar_Log1.txt echo y|del %COMPUTERNAME%_Bar_Log1.txt
echo.%Pub1%|findstr /C:"1" >nul
if not %ERRORLEVEL% 1 (
    type Bar_Log1.*txt >> %COMPUTERNAME%_Bar_Log1.txt
}
for /f %c in ('E:\Foo\bar\bin\somecmd -readparams /LogManagement/EnablePublish1') do set Pub2=%c
if exist %COMPUTERNAME%_Bar_Log2.txt echo y|del %COMPUTERNAME%_Bar_Log2.txt
echo.%Pub2%|findstr /C:"1" >nul
if not %ERRORLEVEL% 1 (
type Bar_Log2.*txt >> %COMPUTERNAME%_Bar_Log2.txt
)
exit
''')
stdout.close()
stdin.close()
ssh.close()
ssh.close()

0 个答案:

没有答案