Değiştirilmiş ortam değişkenleri kümesini kullanarak kabuk aracılığıyla başka bir komut dosyası çalıştırmaya çalışıyorum.subprocess.Popen execve() arg 3 dize olmayan bir değer içeriyor
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
Yukarıdaki kodu çalıştırdıktan sonra aşağıdaki hatayı alıyorum:
ortam değişkenleri ... Ben de bir dize olarak iletmeden denedim geçerken hata geliyorFile "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
- Bu hatalar dışarı ve bir eşleme nesnesine ihtiyacı olduğunu söylüyor. Ancak, olduğu gibi, iletilen ortam bir eşleme nesnesidir ...
Sorun nedir?
Ek Bilgi: Ben "Cevapsız" filtresinden Bu soruyu çıkarmak için yorumlardan cevabı Kopyalama Ubuntu 12.04.1
'execve() arg 3 'ortamıdır. Geçirdiğiniz 'env' parametresinin yalnızca dizeleri içerdiğinden emin misiniz? –
Evet, olumluyım. İlk kontrol ettiğim şey buydu. –
Emin değilim, ama en azından anahtarların ve muhtemelen değerlerin de Python 2.x'te bayt dizeleri olması gerektiğine inanıyorum. Unicode dizeleri kullanıyorsanız, bunları 'utf-8' olarak kodladığınızdan emin olun. Ayrıca, unicode değişmezlerini varsayılan olarak '' __future__ import unicode_literals' üzerinden kullanıyorsanız, sözlük anahtarlarının dize değişmezlerinin 'b' ile unicode editörleri yerine bayt değişmezleri olmasını önleyin. –