[英]Run local python script on remote server thanks to Posh-SSH module (W10)
我想使用 Posh-SSH在遠程服務器上運行本地 python 腳本, Posh-SSH是 Powerhsell 中的一個模塊。 本主題通過執行以下操作使用常規 ssh 提及它:
Get-Content hello.py | ssh user@192.168.1.101 python -
我想在這里使用 Posh-SSH 模塊,但我不知道如何實現它...
我試過這樣的東西,但它不起作用
Invoke-SSHCommand -Index $sessionid.sessionid -Command "$(Get-Content hello.py) | python3 -u -" -ErrorAction Stop
編輯
沒有顯示錯誤,只是卡在上面,什么也不做……
編輯2
好的,我現在明白為什么在發送多行 py 文件時出現此錯誤。
新行不會被重新轉錄,看看什么命令將發送到遠程服務器:
python3 -u - <<"--ENDOFPYTHON--"
chevre="basic" print("Hello, World!")
--ENDOFPYTHON--
並不是:
python3 -u - <<"--ENDOFPYTHON--"
chevre="basic"
print("Hello, World!")
--ENDOFPYTHON--
編輯3
終於完成了! 由於這個主題,我執行將空格更改為換行符,因為它應該是。 為了做到這一點
( (Get-Content hello.py) -join "`r`n")
而不是簡單
$(Get-Content hello.py)
最后該行將是:
$cmd = "python3 -u - <<`"--ENDOFPYTHON--`"`n$((Get-Content $pyscript) -join "`r`n")`n--ENDOFPYTHON--"
Invoke-SSHCommand -Index $sessionid.sessionid -Command $cmd -ErrorAction Stop
也不要忘記刪除該行
#!/usr/bin/env python3
如果存在於您的 py 文件之上,否則它將無法工作。
您當前正在向 SSH 端點發送以下內容:
# Example Python Added: would be replaced with your code
print("Hello, World!") | python3 -u -
假設 bash 作為端點 shell,以上是無效的,並且會產生錯誤或掛起。
您需要使用echo
(假設為 bash ssh 端點)封裝發送到服務器的代碼。
Invoke-SSHCommand -Index $sessionid.sessionid -Command "echo '$((Get-Content hello.py) -join "`r`n")' | python3 -u -" -ErrorAction Stop
以上現在將發送:
echo 'print("Hello, World!")' | python3 -u -
只要您不使用單引號,這就會起作用。 但是,如果您必須使用這些或其他特殊字符,則可能需要使用此處的文檔:
Invoke-SSHCommand -Index $sessionid.sessionid -Command "python3 -u - <<`"--ENDOFPYTHON--`"`n$((Get-Content hello.py) -join "`r`n")`n--ENDOFPYTHON--" -ErrorAction Stop
這里的文檔將准確地發送給程序的標准輸入流:制表符、空格、引號等等。 因此,上面將發送以下內容:
python3 -u - <<"--ENDOFPYTHON--"
print("Hello, World!")
--ENDOFPYTHON--
您可以將--ENDOFPYTHON--
替換為任何未出現在您的 python 文件中的內容。
正如提問者所指出的,添加了-join "`r`n"
因為它需要正確發送換行符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.