第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

與python中子進(jìn)程打開的`/dev/tty`交互

與python中子進(jìn)程打開的`/dev/tty`交互

嚕嚕噠 2023-01-04 14:21:46
我有一個(gè)subprocess.Popen用于啟動(dòng)目標(biāo)程序的 python 腳本:一個(gè)網(wǎng)絡(luò)服務(wù)器。我想與目標(biāo)進(jìn)行交互,所以我將stdin,stdout和分配stderr給管道,現(xiàn)在我可以讀寫它們了。現(xiàn)在,網(wǎng)絡(luò)服務(wù)器鏈接 OpenSSL 庫以進(jìn)行 TLS 處理。作為 TLS 處理的一部分,它會(huì)打開證書并提示輸入密碼。通常,在輸入密碼并按下回車鍵后,網(wǎng)絡(luò)服務(wù)器就會(huì)開始服務(wù)。現(xiàn)在,您可能已經(jīng)猜到了,我想從 python 腳本中輸入此密碼。通常,我需要做的是寫入服務(wù)器的stdin. 但是,有一個(gè)問題。當(dāng) OpenSSL 提示并讀取密碼時(shí),它不使用stdin/ stdout。它打開/dev/tty并使用它。結(jié)果,我必須輸入密碼并手動(dòng)輸入。下圖演示了這種情況。lsof下面,您可以看到服務(wù)器輸出的片段:memcached 25279 USER    0r  FIFO   0,13      0t0  7771739 pipememcached 25279 USER    1w  FIFO   0,13      0t0  7771740 pipememcached 25279 USER    2w  FIFO   0,13      0t0  7771740 pipememcached 25279 USER    3r   REG    8,1     3414  3414276 ....key.pemmemcached 25279 USER    4r   CHR    5,0      0t0       13 /dev/ttymemcached 25279 USER    5w   CHR    5,0      0t0       13 /dev/tty有沒有辦法攔截對(duì)/dev/tty服務(wù)器的調(diào)用,以便我可以直接從腳本寫入它?
查看完整描述

1 回答

?
當(dāng)年話下

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊

通過使用 pty - 偽終端來實(shí)現(xiàn)您所描述的內(nèi)容的標(biāo)準(zhǔn)方法。pty 看起來與普通 tty 完全一樣,只是它是由軟件而不是實(shí)際終端或終端仿真器控制的。

在您的情況下,您可以輕松地使用ptypython 標(biāo)準(zhǔn)庫中的模塊,它提供了一些使用 pty 的實(shí)用程序。具體看pty.spawn()函數(shù):

生成一個(gè)進(jìn)程,并將其控制終端連接到當(dāng)前進(jìn)程的標(biāo)準(zhǔn) io. 這通常用于阻止堅(jiān)持從控制終端讀取的程序。預(yù)計(jì)在 pty 后面生成的進(jìn)程最終將終止,并且當(dāng)它確實(shí)生成時(shí)將返回。

用法示例:

import subprocess, sys


openssl_cmd = ['openssl', 'foo', 'bar']

p = subprocess.Popen([sys.executable, '-c', 'import pty, sys; pty.spawn(sys.argv[1:])', *openssl_cmd])

p.stdin.write('password\n')

print(p.wait())

在這個(gè)例子中,我們沒有直接運(yùn)行 openssl,而是使用 運(yùn)行它spawn,這意味著無論我們寫入進(jìn)程的標(biāo)準(zhǔn)輸入,openssl 都會(huì)從它的/dev/tty.



查看完整回答
反對(duì) 回復(fù) 2023-01-04
  • 1 回答
  • 0 關(guān)注
  • 329 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)