簡體   English   中英

兩個子進程之間的 Python 管道輸出

[英]Python piping output between two subprocesses

我正在處理一些將通過 SSH DD 塊設備的代碼,我想用子進程來做到這一點,以便我可以在傳輸過程中監視 DD 的狀態(使用 SIGUSR1 殺死 dd 進程以獲取其當前狀態,並閱讀使用選擇)。

我試圖實現的命令是這樣的:

dd if=/dev/sda | ssh root@example.com 'dd of=/dev/sda'

我嘗試的當前方法是:

dd_process = subprocess.Popen(['dd','if=/dev/sda'],0,None,None,subprocess.PIPE, subprocess.PIPE)  
ssh_process = subprocess.Popen(['ssh','root@example.com','dd of=/dev/sda'],0,None,dd_process.stdout)

但是,當我運行它時,SSH 進程在 10-40 秒后失效。
我在這里完全遲鈍了,還是沒有辦法在這樣的子進程之間進行管道傳輸?

編輯:原來我的真實代碼中沒有主機名。 這是做事的正確方法。

from subprocess import Popen, PIPE
dd_process = Popen(['dd', 'if=/dev/sda'], stdout=PIPE)
ssh_process = Popen(['ssh', 'root@example.com', 'dd','of=/dev/sda'],stdin=dd_process.stdout, stdout=PIPE)
dd_process.stdout.close() # enable write error in dd if ssh dies
out, err = ssh_process.communicate()

這是將第一個進程輸出管道傳輸到第二個進程的方法。 (注意 ssh_process 中的 stdin)

sh Python 庫可以輕松調用操作系統命令並通過管道傳輸它們。

從文檔:

for line in tr(tail("-f", "test.log", _piped=True), "[:upper:]", "[:lower:]", _iter=True):
    print(line)

暫無
暫無

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

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