【问题标题】:Subprocess.call and programs that ask for inputSubprocess.call 和请求输入的程序
【发布时间】:2017-07-16 22:15:13
【问题描述】:

所以我正在编写一个程序,在某一时刻,它必须调用一个单独的可执行文件。我正在使用subprocess.call 让我的python 脚本调用从命令行执行。问题是,在执行过程中,该可执行文件会提示用户输入两次。我希望我的脚本为可执行文件提供输入,但我不知道该怎么做。

这是在 Windows 10 上,如果有所作为的话。

【问题讨论】:

    标签: python subprocess


    【解决方案1】:
    import os
    os.system("exec_name arguments")
    

    将输入作为参数传递给可执行文件。

    【讨论】:

    • 在执行可执行文件期间,会在提示用户的情况下要求输入。额外的参数似乎没有任何作用。
    • “问题是该可执行文件提示用户输入两次。我希望我的脚本为可执行文件提供输入,但我不知道该怎么做。”我假设您事先有输入,并且可执行文件对输入的调用是多余的。
    【解决方案2】:

    您必须使用subprocess.Popen class 创建一个代表子进程的实例,稍后您希望通过实例.communicate() 方法与之通信。

    这样的东西应该可以工作

    proc = subprocess.Popen([executable_name] + args,
                            stdin=subprocess.PIPE, stdout=subprocess.PIPE,
                            stderr=subprocess.PIPE)
    out, err = proc.communicate(input_str)
    

    subprocess.check_call 在后台做了类似的事情。

    【讨论】:

    • 我试过了,但它给了我一个错误,说它正在寻找字节类型的输入而不是字符串。将输入切换为字节数组然后给我“开始通信后无法发送输入”,这相当令人困惑。
    猜你喜欢
    • 1970-01-01
    • 2022-07-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    相关资源
    最近更新 更多