【问题标题】:how do i pass ctrl-c into subprocess popen using the stdin argument我如何使用标准输入参数将 ctrl-c 传递到子进程 popen
【发布时间】:2023-02-17 00:16:46
【问题描述】:

我习惯于在我的 python 脚本中通过 subprocess.Popen 启动命令。他们中的大多数喜欢: Popen(shlex(cmd), stdin=PIPE, stdout=PIPE, sterr=STDOUT)

现在我有一个案例,命令接收“CTRL-C”进入“命令行界面”模式以接受调试指令。似乎 Popen 不支持将标准输入传递给参数 stdin,如 stdin=input。我知道我可以使用 os.system(cmd) ,它使用标准输入/输出作为其输入/输出,但这不是我的解决方案。

所以有人可以告诉我另一个解决方案吗?提前致谢。

【问题讨论】:

    标签: python subprocess


    【解决方案1】:

    ctrl+c 是一个信号,信号不传递到标准输入(默认情况下),它被发送到连接到终端的所有进程,每个进程负责处理它(所以父子都必须处理@987654322 @Exception),将 stdin 从父级转发到子级不会改变这一点。

    如果您仍想转发 stdin(仅转发写入控制台的文本),则可以传递 stdin=sys.stdin 而不是 PIPE

    【讨论】:

      【解决方案2】:

      如果要发送中断信号,请使用 python 信号模块。

      import signal
      from subprocess import open
      
      processes = Popen(shlex(cmd), stdin=PIPE, stdout=PIPE, sterr=STDOUT)
      processes.send_signal(signal.SIGINT)
      proc.wait()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-26
        • 2020-09-05
        • 2021-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多