【问题标题】:how to repeatedly send argv inputs to an running .exe in python如何重复将argv输入发送到python中正在运行的.exe
【发布时间】:2022-11-11 01:49:39
【问题描述】:

假设我在 python 中运行一个 .exe 程序,无论操作系统或子进程,.exe 程序旨在弹出一些具有不同参数的不同结果,我的步骤如下:

  1. 在python中先运行.exe(让它活着,它会有通信 使用硬件并进行初始化)
  2. 发送不同的参数到 这个 .exe 并收集不同的输出。

    我尝试了以下代码: 你好.py 导入系统

    for arg in sys.argv:
        print(arg)
    print("Hello World!")
    

    测试.py

      import subprocess
      command='./exe_example/output/hello/hello.exe a b'.split()
      result = subprocess.run(command, stdout=subprocess.PIPE, text=True)
      print(result.stdout)
    

    输出是:

    a b 你好,世界!

    但是如何在不再次运行整个 .exe 命令的情况下更改输入 argv 并获得结果?

    更新:我将 hello.py 更改如下:

    import sys
    while True:
        a = input()
        print('response = ',a)
    

    编译成.exe后,可以在dos窗口手动运行

    hello.exe
    a
    response =  a
    b
    response =  b
    c
    response =  c
    

    但我仍然不知道如何在 python 中运行它

【问题讨论】:

  • argv 输入在程序启动时从命令行读取一次。您无法在应用程序运行时发送它们,因为它们在应用程序启动时不在命令行中。如果您需要测试不同的参数,则需要从一开始就多次运行应用程序。
  • 谢谢,还有什么办法可以解决这个问题吗?在这种情况下,.exe 程序应该看起来像一个 com 端口,所以我可以不断向该端口发送不同的命令,并收到不同的结果
  • 然后你必须在其中构建一个通信层,并编写一个单独的应用程序通过该层发送命令。
  • 谢谢,你能发一个示例链接吗?我完全不知道该怎么做
  • 我没有。你和我一样有能力寻找,而我不需要它。 :-)

标签: python-3.x


【解决方案1】:

最后,我想通了,首先从this post,我添加了flush()

cmd = "E:/exe_example/TestCl.exe"
p = Popen(cmd, stdin=PIPE,stdout=PIPE, bufsize=0)
p.stdin.write('getall
'.encode()) 
p.stdin.flush()
for i in range(48):
    print(p.stdout.readline())

那么,很重要,如果我使用read(),因为.exe一直在监听输入,所以它会永远挂断,永远不会输出,在这种情况下,readline()很重要

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    相关资源
    最近更新 更多