2014-10-22 15 views
7

से एक पायथन स्क्रिप्ट में स्ट्रिंग के भीतर नई लाइन पास करना मेरे पास एक स्क्रिप्ट है जिसे मैं कमांड लाइन से चलाता हूं जिसे मैं स्ट्रिंग तर्क पास करने में सक्षम होना चाहता हूं।कमांड लाइन

script.py --string "thing1\nthing2" 

जैसे कि कार्यक्रम '\ n' को एक नई पंक्ति के रूप में व्याख्या करेगा। मैं बस कड़ी मेहनत से कोड स्ट्रिंग लिपि में "thing1 \ nthing2", यह ऐसा करता है

thing1 
thing2 
बजाय

thing1\nthing2

: अगर string="thing1\nthing2" मैं

print string 

वापस जाने के लिए प्राप्त करना चाहते हैं , लेकिन अगर यह getopt के माध्यम से कमांड लाइन तर्क के रूप में दर्ज किया गया है, तो यह इसे पहचान नहीं करता है। मैंने इस पर कई दृष्टिकोणों की कोशिश की है: सीएल स्ट्रिंग में r"%s" % arg के रूप में पढ़ना, कमांडलाइन पर निर्दिष्ट करने के विभिन्न तरीकों, आदि, और कुछ भी काम नहीं करता है। विचार? क्या यह पूरी तरह असंभव है?

+0

यह एक अजगर प्रश्न की तुलना में एक शैल प्रश्न की तरह लगता है। शायद आपको उस शेल कोड को दिखाया जाना चाहिए जिसका आप उपयोग कर रहे हैं और अपने खोल के साथ टैग करें (उदा। 'Bash') – mgilson

उत्तर

-3

यह एक अपेक्षाकृत सरल है और मैं हैरान कोई भी यह कहा गया है हूँ।

अपने अजगर स्क्रिप्ट में केवल निम्नलिखित कोड लिखने

print string.replace("\\n", "\n") 

और आप स्ट्रिंग नई लाइन और नहीं \ N के साथ मुद्रित मिल जाएगा।

+2

यह खराब तर्क डेटा की क्षतिपूर्ति करने के लिए वास्तव में हैक का अधिक है। –

+0

मैं नहीं कहूंगा कि यह एक हैक है। यह एक साधारण समाधान देता है जो स्ट्रिंग पर पाइथन कर रहा है से बचने से बचता है। हर दूसरे समाधान के लिए उपयोगकर्ता को बैश में होना आवश्यक है। यह एक अजगर समाधान देता है। – Ben

+0

हालांकि वे उदाहरण के रूप में बैश का उपयोग करते हैं, अन्य जवाब वास्तव में उपयोगकर्ता के खोल के साथ इंटरैक्ट करने के बारे में हैं। चूंकि वह स्पष्ट रूप से एक खोल के माध्यम से अजगर का आविष्कार कर रहा है, इसलिए शेल-केंद्रित उत्तर सही हैं। इसके अलावा, अजगर स्ट्रिंग के लिए भागने से नहीं कर रहा है। पाइथन में अक्षर '\' और 'n' के साथ एक स्ट्रिंग हो रही है। चूंकि यह स्ट्रिंग एक पायथन फ़ाइल में एक शाब्दिक नहीं था, इसलिए यह बच नहीं गया था। –

8

https://stackoverflow.com/a/4918413/478656 से बैश में, आप का उपयोग कर सकते हैं:

script.py --string $'thing1\nthing2' 

उदा

लेकिन यह बैश-विशिष्ट वाक्यविन्यास है।

+0

किसी कारण से, इसका कोई प्रभाव नहीं पड़ा। –

+2

ध्यान दें कि एकल उद्धरण महत्वपूर्ण हैं। – dionyziz

1

यह वास्तव में एक खोल प्रश्न है क्योंकि खोल सभी कमांड पार्सिंग करता है। पाइथन परवाह नहीं है कि उसके साथ क्या हो रहा है और केवल exec सिस्टम कॉल में क्या आता है। यदि आप बैश का उपयोग कर रहे हैं, तो यह डबल कोट्स के बीच कुछ प्रकार के भागने से नहीं करता है। आप \n, \t, या \xnn भाग निकले किए जाने की तरह बातें चाहते हैं, निम्न सिंटैक्स एक बैश विस्तार है:

python test.py $'thing1\nthing2' 

तुम भी कर सकते हैं:

python test.py "thing1 
thing2" 

यहाँ बैश पर कुछ अधिक जानकारी यदि हवाले से है आप रुचि रखते हैं यहां तक ​​कि अगर आप बैश उपयोग नहीं कर रहे, यह अभी भी अच्छा पढ़ने है:

http://mywiki.wooledge.org/Quotes