【问题标题】:Can Python talk to Informix 4GL Forms?Python 可以与 Informix 4GL 表单对话吗?
【发布时间】:2019-03-22 17:51:49
【问题描述】:

我是一名 Informix 4GL 开发人员。由于可维护性,我的任务是编写一个包装器来自动化基于 4GL 表单的命令行应用程序上的一些任务。

有谁知道如何在 python 上做到这一点? (我也会学习其他语言,但 Python 是我的首选)。

我的想法是使用“键盘”来模拟按键...(我知道很难看)。

问题是,正如我所建议的那样,用 python 或其他语言重写整个应用程序并不适合我的老板。 (应用程序大约有 30 年的历史,数据库也是如此......它很乱)

【问题讨论】:

  • 检查其中一个[python] [informix] 是否满足您的需求。
  • 如果 I4GL 程序是基于 curses 的(curses 的非标准版本,但仍然基于 curses),您可以考虑使用像 expect(或它们的 Python 等价物)这样的工具与 I4GL 程序交互。但是,即使有expect-like 包的支持,编写一个程序来做到这一点也不会很有趣。你使用哪种语言的expect-like 代码无关紧要——我假设有这样的 Python 包; Perl 有。另外,您是在使用(早已失效的)产品 Informix 4GL Forms,还是在使用 I4GL 程序中的通用表单?
  • 你有源代码吗?可以编译源代码吗?您是否考虑过使用命令行参数而不是基于 curses 的输入来驱动程序?这可能更容易管理。需要进行一些代码更改,但可能比编写一个在键盘上伪装成人类的程序要容易得多。
  • @stovfl 谢谢,但其中大部分是 python 谈论 Informix db 而不是表单。
  • @JonathanLeffler 是的,他们有一个 Python 的期望库,遗憾的是它不会在这里做,因为你猜我正在使用长期死的产品 Informix 4GL 表单,你必须用左右键导航它和 esc 确认选择,我不知道只是传递参数的方法。我会问我是否可以对 4GL 源代码进行这些更改以使用命令行参数运行它(我确实有源代码并且可以编译它)。我认为这是我的解决方案,因为丑陋的键盘输入模拟。

标签: python command-line informix 4gl


【解决方案1】:

20 年前我将 cron-jobs 设置为

    fglgo program-name < keystrokes.txt

keystrokes.txt 顾名思义就是手动运行程序所需的击键。这通常用于在半夜生成报告或启动批处理。

四个 Js Genero 的简短文本表明,相同的原则仍然有效。我的小测试程序是

    #! keystroketest.4gl
    MAIN
    DEFINE where_clause CHAR(100)
        OPEN FORM f FROM "keystroketest"
        DISPLAY FORM f
        MENU ""
            COMMAND "Query"
                CONSTRUCT BY NAME where_clause ON field1, field2, field3
                DISPLAY where_clause
                EXIT MENU
        END MENU
    END MAIN

    #! keystroketest.per
    SCREEN 
    {
    Field 1  [f01      ]
    Field 2  [f02      ]
    Field 3  [f03      ]
    }
    END
    ATTRIBUTES
    f01 = formonly.field1;
    f02 = formonly.field2;       
    f03 = formonly.field3;


    od -x keystroketest.txt
    0000000      3151    3030    0d1b    000a                                
    0000007

    fglrun keystroketest < keystroketest.txt
    field1='100'   

所以keystroketest.txt发送Q(选择查询),100(输入一些数据到字段中),ASCII(27)即Escape 棘手的一点是将 ASCII(27) 放入 .txt 文件中。

使用 FourJs Genero,如果您没有添加任何 GUI 小部件,您仍然可以使用 Informix-4gl 程序执行上述操作。如果您添加了 GUI 小部件,您还可以使用我们的自动化测试工具 (Genero Ghost Client) 使用测试脚本来执行 4gl 程序以使其自动化。因此,如果您不想重写这些程序,但想在现代服务器等上编译和运行它们,这可能是一种选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多