日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Python教程:pty —- 偽終端工具

pty —- 偽終端工具

源代碼: Lib/pty.py


pty 模塊定義了一些處理“偽終端”概念的操作:啟動另一個進程并能以程序方式在其控制終端中進行讀寫。

偽終端處理高度依賴于具體平臺。 此代碼主要針對 Linux, FreeBSD 和 macOS 進行了測試(它應(yīng)當也能在其他 POSIX 平臺上工作,但是未經(jīng)充分測試)。

pty 模塊定義了下列函數(shù):

pty.fork()

分叉。 將子進程的控制終端連接到一個偽終端。 返回值為 (pid, fd)。 請注意子進程獲得 pid 0 而 fdinvalid。 父進程返回值為子進程的 pidfd 為一個連接到子進程的控制終端(并同時連接到子進程的標準輸入和輸出)的文件描述符。

pty.openpty()

打開一個新的偽終端對,如果可能將使用 os.openpty(),或是針對通用 Unix 系統(tǒng)的模擬代碼。 返回一個文件描述符對 (master, slave),分別表示主從兩端。

pty.spawn(argv[, master_read[, stdin_read]])

生成一個進程,并將其控制終端連接到當前進程的標準 io。 這常被用來應(yīng)對堅持要從控制終端讀取數(shù)據(jù)的程序。 在 pty 背后生成的進程預(yù)期最后將被終止,而且當它被終止時 spawn 將會返回。

將當前進程的 STDIN 拷貝到子進程并將從子進程接收的數(shù)據(jù)拷貝到當前進程的 STDOUT 的循環(huán)。 如果當前進程的 STDIN 關(guān)閉則它不會向子進程發(fā)信號。

master_readstdin_read 函數(shù)會被傳入一個文件描述符供它們讀取內(nèi)容,并且它們總是應(yīng)當返回一個字節(jié)串。 為了強制 spawn 在子進程退出之前返回,應(yīng)當返回一個空字節(jié)數(shù)組來提示文件的結(jié)束。

兩個函數(shù)的默認實現(xiàn)在每次函數(shù)被調(diào)用時將讀取并返回至多 1024 個字節(jié)。 會向 master_read 回調(diào)傳入偽終端的主文件描述符以從子進程讀取輸出,而向 stdin_read 傳入文件描述符 0 以從父進程的標準輸入讀取數(shù)據(jù)。

從兩個回調(diào)返回空字節(jié)串會被解讀為文件結(jié)束 (EOF) 條件,在此之后回調(diào)將不再被調(diào)用。 如果 stdin_read 發(fā)出 EOF 信號則控制終端就不能再與父進程或子進程進行通信。 除非子進程將不帶任何輸入就退出,否則隨后 spawn 將一直循環(huán)下去。 如果 master_read 發(fā)出 EOF 信號則會有相同的行為結(jié)果(至少是在 Linux 上)。

從子進程中的 os.waitpid() 返回退出狀態(tài)值。

可以使用 waitstatus_to_exitcode() 來將退出狀態(tài)轉(zhuǎn)換為退出碼。

引發(fā)一個 審計事件 pty.spawn,附帶參數(shù) argv

在 3.4 版更改: spawn() 現(xiàn)在會從子進程的 os.waitpid() 返回狀態(tài)值。

示例

以下程序的作用類似于 Unix 命令 script(1)),它使用一個偽終端來記錄一個 “typescript” 里終端進程的所有輸入和輸出:

 
 
 
 
  1. import argparse
  2. import os
  3. import pty
  4. import sys
  5. import time
  6. parser = argparse.ArgumentParser()
  7. parser.add_argument('-a', dest='append', action='store_true')
  8. parser.add_argument('-p', dest='use_python', action='store_true')
  9. parser.add_argument('filename', nargs='?', default='typescript')
  10. options = parser.parse_args()
  11. shell = sys.executable if options.use_python else os.environ.get('SHELL', 'sh')
  12. filename = options.filename
  13. mode = 'ab' if options.append else 'wb'
  14. with open(filename, mode) as script:
  15. def read(fd):
  16. data = os.read(fd, 1024)
  17. script.write(data)
  18. return data
  19. print('Script started, file is', filename)
  20. script.write(('Script started on %s\n' % time.asctime()).encode())
  21. pty.spawn(shell, read)
  22. script.write(('Script done on %s\n' % time.asctime()).encode())
  23. print('Script done, file is', filename)

文章題目:創(chuàng)新互聯(lián)Python教程:pty —- 偽終端工具
URL網(wǎng)址:http://www.5511xx.com/article/cooieje.html