簡體   English   中英

寫入文件描述符 0 (STDIN) 僅影響終端。 程序不讀

[英]Writing to File descriptor 0 (STDIN) only affects terminal. Program doesn't read

我正在研究文件描述符,並且正在嘗試模擬 FD 0 (STDIN) 的輸入。 我在 linux 環境中進行測試。 我的意圖是通過終端編寫模擬代碼的標准輸入

這是我的 python 代碼:

import sys
from os import getpid

print(f'Hello world! Process: { getpid() }')


for line in sys.stdin:
    print(f'Echoing: {line}')

當我嘗試在另一個終端中寫入關聯的 FD 0 時:

echo "Test" >> /proc/<pid>/fd/0

它只在終端打印,程序從不讀取。 我嘗試添加EOF,break line,heredoc,但我仍然沒有找到解決方案。

我正在嘗試的可能嗎?

感謝@Ian Aboot 的回答,我可以在這里找到一些解釋:

https://unix.stackexchange.com/questions/385771/writing-to-stdin-of-a-process/385782

根據上面帖子的回答:

訪問 /proc/PID/fd/0 不會訪問進程 PID 的文件描述符 0,它訪問的是 PID 在文件描述符 0 上打開的文件。這是一個微妙的區別,但它很重要。 文件描述符是進程與文件的連接。 無論文件是如何打開的,寫入文件描述符都會寫入文件。

如果 /proc/PID/fd/0 是一個終端,那么寫入它會在終端上輸出數據。 終端文件是雙向的:寫入它會輸出數據,即終端顯示文本; 從終端讀取輸入數據,即終端傳輸用戶輸入。

基本上我必須控制終端進程才能將輸入轉發到我的進程中。 直接寫入 /dev/pty* 不起作用。

例如,將輸入重定向到 fifo 就可以按預期工作。 也許有一種方法可以模擬終端進程和正在運行的程序本身之間的東西,所以我會繼續研究

暫無
暫無

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

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