list index out of range
コマンドで実行するとうまくいくのに、cgi にするとうまくいかない。
なんでだろう...
#!/usr/bin/python
import os, string, cgi
f = os.popen('ifconfig eth0')
o = ''
for line in f:
o += line
f.close()
o = string.split(o)# for cgi
# print 'Content-type: text/html?n'
# print '<HTML><HEAD></HEAD><BODY><PRE>?n'
print o[0]
# print '</PRE></BODY></HTML>?n'
出るエラー。
print o[0]
IndexError: list index out of range
args = ('list index out of range',)
string.split()が返す値は、リストオブジェクトであると仮定できないの?
それと、どうしてコマンドと cgi で結果が異なるのだろう???
原因はパスが通っていないこと?
コメントいただいた方の指摘でパスの実験をしてみる。
こんどは、OS X 環境。
$ python
Python 2.3 (#1, Sep 13 2003, 00:49:11)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os, string, cgi
>>> f = os.popen('ifconfig en0')
>>> o = ''
>>> for line in f:
... o += line
...
>>> f.close()
>>> o = string.split(o)
>>> print o[0]
en0:
パスを空にしてから試験。
$ PATH= /usr/bin/python
>>> import os, string, cgi
>>> f = os.popen('ifconfig en0')
>>> sh: line 1: ifconfig: No such file or directory>>> o = ''
>>> for line in f:
... o += line
...
>>> f.close()
32512
>>> o = string.split(o)
>>> print o[0]
Traceback (most recent call last):
File "", line 1, in ?
IndexError: list index out of range
おっしゃる通りでした(^^;。どうもありがとうございました。
エラーは popen の戻り値に入らないってことなのね。
# コマンドパスはフルで書けってのはシェルスクリプトでも鉄則でしたね.. orz
一応、フルパスにして確認。
$ PATH= /usr/bin/python
>>> import os, string, cgi
>>> f = os.popen('/sbin/ifconfig en0')
>>> o = ''
>>> for line in f:
... o += line
...
>>> f.close()
>>> o = string.split(o)
>>> print o[0]
en0:
なんともマヌケで恥ずかしいネタでした...