2013-02-24 66 views
3

我正在嘗試將函數的結果寫入stdin。將函數結果寫入stdin

這是代碼:

def testy(): 
    return 'Testy !' 

import sys 
sys.stdin.write(testy()) 

而我得到的錯誤是:

Traceback (most recent call last): 
    File "stdin_test2.py", line 7, in <module> 
    sys.stdin.write(testy()) 
io.UnsupportedOperation: not writable 

我不能完全肯定,這是做事的正確方法嗎?

+3

你想要做的是什麼? 'stdin'用於讀取輸入,它是以只讀方式打開的。 – 2013-02-24 19:17:29

+0

是的,我知道。我想要做的是通過寫入標準輸入來模擬input()方法的按鍵。 – 2013-02-24 19:19:04

+0

回溯告訴你它不可寫...你讀過了嗎? – 2013-02-24 19:19:23

回答

10

你可以用類似文件的對象嘲笑stdin

import sys 
import StringIO 

oldstdin = sys.stdin 
sys.stdin = StringIO.StringIO('asdlkj') 

print raw_input('.')  # .asdlkj 
+0

我想我會試試這個解決方案。謝謝 ! – 2013-02-24 19:35:29

0

stdin是輸入流,而不是輸出流。你不能寫信給它。

你可能會做的事情可能是使用os.pipe創建一個管道,使用os.fdopen將可讀端轉換成文件對象,然後用它替換stdin,然後寫入可寫端。

r, w = os.pipe() 
new_stdin = os.fdopen(r, 'r') 
old_stdin, sys.stdin = sys.stdin, new_stdin 

儘管如此,我看不到那個結局。使用input重寫應用程序的部分會更容易,也更不容易出錯。