変更された環境変数セットを使用するシェル経由で別のスクリプトを実行しようとしています。上記のコードを実行した後subprocess.Popen execve()arg 3には文字列以外の値が含まれています
def cgi_call(script, environ):
pSCRIPT = subprocess.Popen(script, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
stdin=subprocess.PIPE, env=environ, shell=True)
pc = pSCRIPT.communicate()
status = "200 OK"
headers = [('Content-Type',"text/html")]
if pc[1] != '':
raise RuntimeError, pc[1]
else:
rval = str(pc[0])
return status, headers, rval
、私は次のエラーを取得する:
File "server/httpd.py", line 76, in DynamicServer
status, headers, rval = handler(environ)
File "server/httpd.py", line 43, in handler
status, headers, rval = cgi_call(srvpath+"../www/public_html"+environ["PATH_INFO"]+'index.py',environ)
File "server/httpd.py", line 21, in cgi_call
stdin=subprocess.PIPE, env=environ, shell=True)
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
<type 'exceptions.TypeError'> execve() arg 3 contains a non-string value
環境変数を渡すときにエラーが付属しています...私も文字列として渡す試してみた - それはエラーそれがマッピングオブジェクトを必要としていると言います。しかし、それがそのまま渡される環境はマッピングオブジェクトです...
何が問題なのですか?
追加情報: 私は「未回答」フィルタからこの質問を削除するために、コメントからの回答をコピーするのUbuntu 12.04.1
'execve()arg 3'は環境です。あなたが渡している 'env'パラメータには文字列しか含まれていませんか? –
はい、私は肯定的です。それが私がチェックした最初のものでした。 –
私は確信していませんが、少なくともPython 2.xのキーと、場合によっては値もバイト文字列である必要があります。ユニコード文字列を使用している場合は、それらを 'utf-8'にエンコードしてください。また、 'from __future__ import unicode_literals'でデフォルトでUnicodeリテラルを使用している場合は、辞書キーの文字列リテラルにUnicodeリテラルではなく、バイトリテラルである' b'を接頭辞として付けるようにしてください。 –