我试图在这里构建这个脚本,它将接受一个跟踪号作为输入,构建URL,然后获取HTML响应。我正在尝试使用html2text程序在终端中显示此响应。我试图模拟命令“html2text filename”,它在终端中输入到我的python脚本中,但是显示的是原始的HTML文件,而不是标准的html2text输出我哪里做错了?

#!/usr/bin/python3

#trial using bash calls no html2text library

import requests
import subprocess # to execute bash commands

try:
    check_for_package = subprocess.Popen(("dpkg","-s","html2text"), stdout=subprocess.PIPE)
    output = subprocess.check_output(("grep", "Status"), stdin=check_for_package.stdout)
    check_for_package.wait()
    opstr=str(output, 'utf-8')
    print(opstr)
    if opstr == "Status: install ok installed\n" :
        print("Package installed")

except:
    print("installing html2text..............................")
    install_pkg = subprocess.check_call("sudo apt install html2text", shell=True)

r = requests.get("http://ipsweb.ptcmysore.gov.in/ipswebtracking/IPSWeb_item_events.asp?itemid=RT404715658HK&Submit=Submit")
print(r.status_code)

raw_html=r.text
#print(raw_html)
#raw_html = str(raw_html , 'utf-8')

view_html = subprocess.Popen(["html2text", raw_html])
output = view_html.communicate()
view_html.wait()
#view_html = subprocess.Popen("html2text template", shell=True)
print(output)

更新:我目前已经解决了这个问题,但是将r.text的输出存储在一个文件中,然后用html2text调用它

最佳答案

您使用的html2text版本要求参数是文件名,而不是HTML。要向它提供HTML,需要在不带参数的情况下运行命令,并在其标准输入上提供HTML。

view_html = subprocess.Popen(["html2text"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
view_html.stdin.write(raw_html)
view_html.stdin.close() # Close the pipe so html2text will get EOF
output = view_html.stdout.read()

08-27 13:18