我正在使用此代碼
tar zcf - somefolder/ | ssh user@server "cd /path/to/remote && tar zxf -"
在 2 個系統之間復制檔案
我想用python來做
我做了
import subprocess
p=subprocess.Popen('tar zcf - somefolder/ | ssh user@server "cd /path/to/remote && tar zxf -')
我也試過
p=subprocess.Popen(["tar","-zcf somefolder | ssh [email protected] /path/to/remote && tar -zxf"])
但兩者都不起作用我也試過用 run 而不是 popen 但仍然不起作用
但
stream = os.popen("cmd")
這作業正常,但問題是我沒有獲得狀態
在我可以使用的第一種方法中
os.waitpid(p.pid, 0)
獲取行程的實時狀態
我想要的是在不使用外部庫和實時狀態的情況下在遠程和本地之間傳輸檔案
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
我會保持簡單并使用 os 模塊,它也比子行程更快:
result = os.popen("command").read()
uj5u.com熱心網友回復:
更新:抱歉,我忽略了“無外部模塊”。但也許它對其他人搜索有用。
有一個模塊:)
from paramiko import SSHClient
from scp import SCPClient
ssh = SSHClient()
ssh.load_system_host_keys()
ssh.connect('example.com')
# SCPCLient takes a paramiko transport as an argument
scp = SCPClient(ssh.get_transport())
scp.put('test.txt', 'test2.txt')
scp.get('test2.txt')
# Uploading the 'test' directory with its content in the
# '/home/user/dump' remote directory
scp.put('test', recursive=True, remote_path='/home/user/dump')
scp.close()
或使用with:
from paramiko import SSHClient
from scp import SCPClient
with SSHClient() as ssh:
ssh.load_system_host_keys()
ssh.connect('example.com')
with SCPClient(ssh.get_transport()) as scp:
scp.put('test.txt', 'test2.txt')
scp.get('test2.txt')
見:https : //pypi.org/project/scp/
uj5u.com熱心網友回復:
根據我的經驗,subprocess.run()為了運行外部 Ubuntu 程式/行程,我不得不使用每個命令引數或例如不同的串列條目,如下所示:
subprocess.run(['pip3', 'install', 'someModule'])
所以也許可以嘗試將每個空格分隔的引數都作為它自己的串列元素。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/341856.html
上一篇:查找在特定檔案中找到文本的目錄
