2010-04-22 17 views
6

में पॉज़िक्स खोल विशेष वर्ण उद्धरण कई बार मैं स्वचालित रूप से पाइथन से छोटी शैल स्क्रिप्ट बनाते हैं, और मैं यह सुनिश्चित करना चाहता हूं कि फ़ाइल नाम तर्कों में गैर-भागने वाले विशेष वर्ण न हों। मैंने अपना खुद का समाधान लॉन्च किया है, कि मैं एक उत्तर के रूप में प्रदान करूंगा, लेकिन मुझे लगभग निश्चित है कि मैंने मानक लाइब्रेरी में कहीं ऐसा खो दिया है। "खो गया" मेरा मतलब है कि मुझे इसे एक स्पष्ट मॉड्यूल में नहीं मिला जैसे shlex, cmd या subprocessपायथन आउटपुट

क्या आप stdlib में ऐसे फ़ंक्शन के बारे में जानते हैं? यदि हाँ, यह कहां है?

यहां तक ​​कि एक नकारात्मक (लेकिन निश्चित और सही :) उत्तर स्वीकार किया जाएगा।

+1

संभव डुप्लिकेट [पायथन में os.system() से बचने का सबसे अच्छा तरीका क्या है?] (Http://stackoverflow.com/questions/35817/whats-the-best-way-to-escape-os- सिस्टम-कॉल-इन-पायथन) - भले ही अन्य ओएससिस्टम के बारे में बात कर रहा है और ऐसा नहीं है, यह वही उद्देश्य के लिए एक ही उद्धरण है। और यह वही जवाब है। –

उत्तर

6

pipes.quote():

>>> from pipes import quote 
>>> quote("""some'horrible"string\with lots of junk!$$!""") 
'"some\'horrible\\"string\\\\with lots of junk!\\$\\$!"' 

हालांकि ध्यान दें कि यह यकीनन एक बग जहां एक शून्य लंबाई आर्ग कुछ भी नहीं वापस आ जाएगी मिला है:

>>> quote("") 
'' 

शायद यह बेहतर होगा अगर यह '""' लौट आए।

+0

हां, धन्यवाद! और यह एक स्पष्ट मॉड्यूल में है (एक POSIX उपयोगकर्ता के लिए), तो मैं गलत था। – tzot

+0

कभी-कभी 'subprocess.list2cmdline' भी उपयोगी होता है; यह * नहीं * शैल मेटाचर्स से बचता है लेकिन रिक्त स्थान से बचने और भागने से बचने में संभालता है, इसलिए जब आप * रिमोट खोल को खोलना चाहते हैं तो यह काफी अच्छा होता है लेकिन यह रास्ते में डी-एस्केपिंग के एक या अधिक अतिरिक्त परतों से गुज़र रहा है, जैसे 'ssh' रिमोट कमांड आमंत्रण। –

1

समारोह मैं का उपयोग करें:

def quote_filename(filename): 
    return '"%s"' % (
     filename 
     .replace('\\', '\\\\') 
     .replace('"', '\"') 
     .replace('$', '\$') 
     .replace('`', '\`') 
    ) 

है कि: मैं हमेशा दोहरे उद्धरण में फ़ाइल नाम जोड़ देना, और फिर डबल कोट्स के अंदर विशेष केवल अक्षर बोली।

+0

क्या आप इसे जवाब देने के लिए कोई सवाल पूछते समय परेशान नहीं होते हैं, और यह पहली जगह में एक डुप्ली था? : पी (हाल ही में मुझे भी हुआ।) –

+0

@ रॉगर: नरक। एसओ की खोज तंत्र में सुधार की जरूरत है। पूछने से पहले मैंने * जवाब दिया था। ध्यान दें कि मेरा जवाब कभी * * उत्तर के रूप में चुना जाने का इरादा नहीं था। मैंने सवाल बंद करने के लिए भी मतदान किया। – tzot

+0

[दरअसल, यह करता है।] (Http://meta.stackexchange.com/questions/42878/show-related-questions-just-before-question- सबमिशन) मैं आपके पूछने के बारे में कुछ भी बुरा कहने की कोशिश नहीं कर रहा था प्रश्न (लेखन और पोस्टिंग में जाने वाली सभी विचार प्रक्रियाओं के बाद तक खोजना मुश्किल हो सकता है), बस निराशा साझा करने की कोशिश कर रहा है। –

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