2016-03-24 133 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)