0

私のサーバーは、ssh 接続を許可するために freeSSHd を使用して Windows 7 を実行しています。paramiko を使用して、そのサーバーでプログラム MyProgram.exe をリモートで実行しようとしています。これは、その仕事をするコードの関連部分です。それでも、改善する必要があります。

import paramiko
import time

cmds = 'xcopy file1 backup\\file1 & xcopy file2 backup\\file2 & MyProgram.exe file1 file2'
final_cmds = 'cmd.exe /c "' + final_cmds + '"'

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())    
ipaddr = socket.gethostbyname(hostname) 
ssh.connect(ipaddr, port=port, username=username, password=password)    
transport = ssh.get_transport()
channel = transport.open_session()
channel.setblocking(1)
channel.settimeout(None)
channel.set_combine_stderr(1)
channel.exec_command(final_cmds)

while True:
    try:
        if channel.exit_status_ready():
            if channel.recv_ready(): 
                output = channel.recv(1024)
                break
    except:
        print 'Exception'
        break       
    time.sleep(2)

ssh.close()

上記のコードの問題は、サーバー側で新しいコマンド ウィンドウを開くことです。cmd.exe をバックグラウンドで実行するか、少なくとも最小化して実行したいのですが、行を変更すると

final_cmds = 'cmd.exe /c "' + final_cmds + '"'

の中へ

final_cmds = 'start /b cmd.exe /c "' + final_cmds + '"'

また

final_cmds = 'start /min cmd.exe /c "' + final_cmds + '"'

あるいは

final_cmds = 'start cmd.exe /c "' + final_cmds + '"'

「リモート システムでコマンドまたはシェルを実行できません: プロセスの実行に失敗しました」というエラーが表示されます。何か案は?

ありがとう

4

1 に答える 1