簡體   English   中英

在os.system之后清除Python CGI中的stdout

[英]Clear stdout in Python CGI after os.system

我正在使用os.system調用將svg數據轉換為圖像的外部程序(Apache Batik)。 然后,我想將圖像下載到用戶磁盤中。

但是每當我用Apache調用cgi時,都會出現錯誤:

 malformed header from script. Bad header=About to transcode 1 SVG file

這是來自os.system命令的stdout,因此在搜索后我發現可以使用sys.stdout.flush()解決問題,但不幸的是,它仍然會給出相同的錯誤。 這是腳本:

import os
import cgi
import sys
arg = cgi.FieldStorage()
os.system('java -Djava.awt.headless=true -jar "batik-1.7/batik-rasterizer.jar" "pythonchart.svg"')
sys.stdout.flush() //NOT WORKING, STILL THE SAME ERROR

print "Content-Type: image/png"
print "Content-Disposition: attachment; filename=pythonchart.png"
print
print open("pythonchart.png","rb").read()
from subprocess import Popen, STDOUT, PIPE
from time import sleep

x = Popen('external-command -test paramater', shell=True, stdout=PIPE, stdin=PIPE, stderr=STDOUT)
while x.poll() == None:
    sleep(0.025)
x.stdout.close()
x.stdin.close()

考慮改用Popen 一個明顯的好處是您可以用一種更加整潔的方式控制stdout / stdin,而不會“滲出”到主程序中。 其次,如果需要,您可以潛在地將輸入發送到外部應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM