【问题标题】:run an executable using wexpect使用 wexpect 运行可执行文件
【发布时间】:2012-07-04 11:01:07
【问题描述】:

我有一个可执行文件 (evapo.exe) 必须使用输入文件 (inputs.prj) 调用,通常我只需键入 c:\myfiles\evapo inputs.prj 即可使用 Windows 命令提示符执行此操作(当然可执行文件和输入文件都位于 myfiles 文件夹中)

现在我希望能够使用 python 做同样的事情。 SO上的其他类似问题建议使用wexpect,因为当可执行文件要求运行其他信息时,其他方法(例如子进程)不起作用(在我的情况下,信息是输入文件)。我试过了:

import wexpect

wexpect.run(r'c:\myfiles\evapo.exe')

python 挂起...,如果有人知道我如何使用 cmd 组合 exe 和输入文件,请帮助我。

【问题讨论】:

  • 如果您“通过键入 c:\myfiles\evapo inputs.prj”运行它,那么可执行文件不会“要求运行其他信息”,它会从命令行获取所需的一切论据。但是你没有传递任何论据。在不知道 evapo 做什么的情况下无法确定,但我敢打赌,在没有任何参数的情况下,它会读取标准输入,这就是它挂起的原因。

标签: python wexpect


【解决方案1】:

如果您要传递的所有信息都是文件名,则不需要wexpect

from subprocess import check_call

check_call(r'c:\myfiles\evapo.exe inputs.prj')

【讨论】:

    【解决方案2】:

    我猜 wexpect 是 pexpect 的 python 端口,行为类似,但适用于 windows。

    我检查了以下内容:http://www.jjoseph.org/files/led_calibration/wexpect.py

    如果是这种情况,那么pexpect 的任何示例都应该可以工作。

    run() 命令应该在您只想收集输出时使用。 当您想要交互和提供输入时,这不起作用。

    如果你想发送输入,你需要使用 spawn() 函数。

    查看代码中的示例。这里的命令要求输入由 wexpect 发送的输入

    child = wexpect.spawn('some command')
    child.expect ('Password:')
    child.sendline (mypassword)
    

    只需在 pexpect 上查看以下答案并将其替换为 wexpect。

    对于 Windows,以下端口也被建议作为工作之一:

    【讨论】:

    • @Eric Gentil:我希望这会有所帮助
    • :好像有两个模块:wexpect 和 winpexpect。它们有什么不同吗?
    • @EricGentil:是的。两者似乎都是令人期待的。此外,如果您的程序期望文件名作为命令行参数,那么我的解决方案无效。我的印象是这个程序需要用户输入,比如输入密码。
    猜你喜欢
    • 2012-07-24
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 2020-10-21
    • 1970-01-01
    相关资源
    最近更新 更多