【问题标题】:Write to ctypes stdin python写入 ctypes 标准输入 python
【发布时间】:2016-07-11 21:13:17
【问题描述】:

我有以下 python 代码

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

函数 myFunction 等待一个标准输入,所以我的问题是:如何使用 python 模拟这个输入?

【问题讨论】:

  • 这可能会有所帮助:stackoverflow.com/questions/510357/…
  • 您会发现许多变体的解决方案是用管道临时替换当前的标准输入。首先保存当前标准输入的副本,例如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和管道文件描述符。

标签: python stdin ctypes


【解决方案1】:

也许你可以使用 xautomation http://xautomation.sourceforge.net/keyboard.html

【讨论】:

  • 最好通过显示该链接的帮助来具体回答。并编写一些代码。
【解决方案2】:

我认为应用自动化任务可能需要它,因此我可以推荐 PyUserInput 包用于输入模拟:

from pykeyboard import PyKeyboard

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

Windows 用户示例(althogh PyUserInput 是适用于 Windows 的 corssplatform,它构建在 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)

【讨论】:

    猜你喜欢
    • 2012-01-19
    • 2013-06-12
    • 2012-08-24
    • 1970-01-01
    • 2011-07-23
    • 2014-03-06
    • 1970-01-01
    • 2012-06-08
    • 2012-01-18
    相关资源
    最近更新 更多