2011-09-30 18 views
12

होनी चाहिए मेरे पास एक django साइट है जहां मुझे सबप्रोसेस का उपयोग करके एक स्क्रिप्ट कॉल करने की आवश्यकता है। उपप्रक्रिया कॉल काम करता है जब मैं ASCII वर्ण का उपयोग कर रहा है, लेकिन जब मैं तर्क है कि UTF-8 एन्कोडेड हैं जारी करने के लिए प्रयास करते हैं, मैं एक त्रुटि मिलती है:पायथन उपप्रोसेस और यूनिकोड execv() arg 2 में केवल स्ट्रिंग्स

execv() arg 2 must contain only strings. 

स्ट्रिंग u'Wiadomo\u015b\u0107' एक postgres db से आ रही है। यह उदाहरण पॉलिश शब्दों का उपयोग कर रहा है। जब मैं इसे अंग्रेजी शब्दों का उपयोग करके चलाता हूं, तो मुझे कोई समस्या नहीं है।

कॉल इस तरह दिखता है:

subprocess.Popen(['/usr/lib/p3web2/src/post_n_campaigns.py', '-c', u'bm01', '-1', u'Twoja', '-2', u'Wiadomo\u015b\u0107', '-3', u'', '-4', u'', '-5', u'', '-6', u'', '-m', u'pl', '-p', 'yes']) 

मैं कैसे इस मामले में तार को संभालने के लिए यकीन नहीं है। अजीब चीज यह है कि जब मैं इसे अजगर दुभाषिया के माध्यम से चलाता हूं तो यह ठीक काम करता है।

उत्तर

17

आपको अपने प्रोग्राम की एन्कोडिंग में यूनिकोड स्ट्रिंग को एन्कोड करना चाहिए। क्या आप जानते हैं कार्यक्रम की उम्मीद UTF-8 हैं:

u'Wiadomo\u015b\u0107'.encode('utf8') 

आप आप की जरूरत एन्कोडिंग क्या पता नहीं है, तो आप अपने मंच के डिफ़ॉल्ट एन्कोडिंग की कोशिश कर सकते:

u'Wiadomo\u015b\u0107'.encode() 
+3

धन्यवाद है कि चाल किया ... मैंने सोचा कि यह पहले से ही एन्कोड किया गया था ... सबक सीखा। – deecodameeko

संबंधित मुद्दे