簡體   English   中英

在遠程機器python上執行程序

[英]execute a program on a remote machine python

我可以使用子進程在python環境中本地執行腳本,但是由於跨平台問題,我必須在遠程服務器上執行腳本,然后在本地計算機上獲取結果。

目錄parserpath包含一些第三方模塊,可以使用parserpath目錄中存在的腳本run.sh執行這些模塊。 但是,此parserpath目錄位於遠程服務器上。 這就是我所擁有的,但這僅在parserpath是本地目錄時才有效。 我怎樣才能SSH到一個遠程目錄並運行腳本run.sh?

def run_parser(filename):

     current_dir = os.getcwd()
     parser_path="/parserpath"
     os.chdir(parser_path)
     subprocess.call("./run.sh " + filename, shell=True)
     os.chdir(current_dir)

對於大多數linux shell,您可以通過執行如下所示的子shell在不同的工作目錄中運行命令

/home/usr> (cd /usr/local/bin;pwd)
/usr/local/bin
/home/usr>

您可以通過ssh對遠程系統執行相同的操作。 根據您使用的ssh客戶端,您可能會對其進行精簡。 例如,使用paramikoexec_command ,將為每個命令創建一個新的遠程shell,因此cd /path/on/remote/machine;./run.sh就足夠了。

python 2.x上paramiko的一個極簡示例是

import sys
import paramiko

try:
    hostname, username, password, targetpath = sys.argv[1:5]
except ValueError:
    print("Failed, call with hostname username password targetpath")

command = "cd {};pwd".format(targetpath)
print("Command to send: {}".format(command))

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=hostname, username=username, password=password)
stdin, stdout, stderr = ssh.exec_command("cd {};pwd".format(targetpath))
print(stdout.read())
ssh.close()

python3應該類似。 還有其他選項,例如python的libssh2綁定, pexpect s ssh支持等...

使用SSH密鑰自動執行通過SSH登錄的過程。 以下是用於遠程執行腳本的以下代碼。

ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],
                   shell=False,
                   stdout=subprocess.PIPE,
                   stderr=subprocess.PIPE)

嘗試,ssh user @ host sh路徑/run.sh

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM