微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当终端命令需要用户输入时,Python线程无法超时

如何解决当终端命令需要用户输入时,Python线程无法超时

任务

我正在构建一个 Python 脚本,该脚本的目的是审核许多 .tex 文件,此审核过程中的第一步是测试每个文件是否都将编译,每个文件都使用终端命令xelatex filename.tex进行编译。

这些是我测试给定文件是否可以编译的方法

def run_xelatex(self):
    """ Ronseal. """
    self.latex_process = Popen(["xelatex","current.tex"],stdout=PIPE)
    lines = self.latex_process.stdout.readlines()
    for line in self.latex_process.stdout:
        self.screentext = self.screentext+line.decode("utf-8")+"\n"

def attempt_to_compile(self):
    """ Attempt to compile an article,and kill the process if
    necessary. """
    thread = Thread(target=self.run_xelatex())
    thread.start()
    thread.join(3)
    if thread.is_alive():
        self.latex_process.kill()
        thread.join()
        return False
    return True

用英语:我创建了一个线程,该线程又创建了一个进程,该进程又试图编译给定的文件。如果线程超时,则该文件将被标记为不可编译。

问题

问题是,如果xelatex发现某种错误的语法,它将要求用户手动输入以解决该问题。但是,由于某种原因,进程在等待用户输入时线程不会超时。这意味着,当我尝试运行该脚本时,它会在中间流程中在几个点处停止,直到我混入return键以使事情重新进行。这不理想。

我想要什么

  • 解释当线程中的进程要求用户输入时,为什么线程无法超时。
  • 通过在上述情况下强制线程超时或阻止xelatex请求用户输入来解决该问题。
  • 或者,解释为什么我要达到的目标完全是疯狂的,并提出了一条更好的进攻路线的建议。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。