現象
以下のコードを書き、拡張子を.cgi
として、/usr/lib/cgi-bin
に保存する。
import subprocess
print('Content-type: text/html¥n')
print(subprocess.run('hostname'))
ブラウザからこのCGIスクリプトにアクセスすると、500 Internal Server Error
が返ってくる。
Apacheのログでは、
malformed header from script
と出力される。
原因と解決方法
subprocess.run()
は、何も指定しないと標準出力に結果を出力しない。
デフォルトでは、標準出力や標準エラー出力を捕捉しません。捕捉したい場合は stdout または/および stderr 引数に PIPE を渡してください。
引数stdout
にsubprocess.PIPE
を指定すると標準出力に結果を出力する。
`subprocess.run()'をCGIスクリプトで使うときは以下のようにする。
result = subprocess.run('hostname', stdout=subprocess.PIPE)
print(result.stdout)