我试图在这里构建这个脚本,它将接受一个跟踪号作为输入,构建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()