如何解决当终端命令需要用户输入时,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 举报,一经查实,本站将立刻删除。