2016-03-24 177 views
2

我有以下Python代碼寫入ctypes的標準輸入蟒蛇

import ctypes 
import sys 
dll = ctypes.CDLL('./file.so') 
if __name__ == "__main__": 
    dll.myFunction() 

的標準輸入輸入功能myFunction的等待,所以我的問題是:我怎麼能模擬使用python這個輸入?

+0

這可能有所幫助:http:// stackoverflow.com/questions/510357/python-read-a-single-character-from-the-user –

+1

你會發現許多變化的解決方案是暫時用管道替換當前的stdin。首先保存當前stdin的副本,例如'old_stdin = os.dup(sys.stdin.fileno())'。然後創建一個管道,例如'fd_read,fd_write = os.pipe()',並將讀取結束設置爲新的標準輸入,例如, 'os.dup2(fd_read,sys.stdin.fileno())'。在調用'myFunction'之前,通過'os.write'寫入'fd_write'。調用該函數後,使用'os.dup2(old_stdin,sys.stdin.fileno())'恢復原始標準輸入,並通過'os.close'關閉'old_stdin'和管道文件描述符。 – eryksun

回答

0

我認爲這可能需要爲應用程序的自動化任務,所以我可以推薦PyUserInput包輸入模擬:

from pykeyboard import PyKeyboard 

kbd = PyKeyboard() 
kbd.tap_key('h') 
kbd.tap_key('i') 

示例對於Windows用戶(althogh PyUserInput是corssplatform對於Windows,它被構建在pywin32之上):

import time 
import win32com.client as comclt 
wsh = comclt.Dispatch("WScript.Shell") 
wsh.Run("calc") 
time.sleep(1) 
wsh.AppActivate("Calculator") 

from pykeyboard import PyKeyboard 
kbd = PyKeyboard() 
kbd.type_string(["1"]+["0"]*6,interval=1)