2011-01-28 12 views
5

मैं shlex.split का उपयोग कर रहा हूं ताकि subprocess.Popen कॉल के लिए तर्कों को टोकननाइज़ किया जा सके। हालांकि, जब उन आर्ग में से एक एक यूएनसी मार्ग है, चीजों को बालों मिलती है:shlex.split सम्मान यूएनसी पथ

import shlex 

raw_args = '-path "\\\\server\\folder\\file.txt" -arg SomeValue' 
args = shlex.split(raw_args) 

print raw_args 
print args 

-path "\\server\folder\file.txt" -arg SomeValue 
['-path', '\\server\\folder\\file.txt', '-arg', 'SomeValue'] 

पैदा करता है आप देख सकते हैं, सामने के बैकस्लैश नीचे छीन रहे हैं। मैं निम्नलिखित दो लाइनों को जोड़कर इस पर काम कर रहा हूं, लेकिन क्या कोई बेहतर तरीका है?

if args[0].startswith('\\'): 
    args[0] = '\\' + args[0] 
+0

आपका प्रश्न अनिश्चित है। ऊपर दिए गए उदाहरण में आप स्ट्रिंग अक्षर का उपयोग कर रहे हैं। आप डुसन के जवाब में तकनीक का उपयोग करके या केवल कच्चे स्ट्रिंग अक्षर का उपयोग करके उनका सामना कर सकते हैं। हालांकि, आपने मेरे जवाब पर टिप्पणी की कि तारों को एक फाइल से लिया जाता है। इस मामले में, पायथन उन्हें छूने की भी कोशिश नहीं करेगा, उनके पास समान मात्रा में स्लेश होंगे। अपनी स्ट्रिंग को फ़ाइल से लोड करने और इसे प्रिंट करने का प्रयास करें। या तो, या मैं कुछ स्पष्ट याद कर रहा हूँ। –

+0

@Alex अच्छा बिंदु। मैं ऊपर दिए गए नमूने में फ़ाइल से स्ट्रिंग लोड करते समय मैंने जो व्यवहार देखा था, उसे पुन: उत्पन्न किया था, इसलिए मुझे लगता है कि यह समान व्यवहार करेगा। फ़ाइल से लोड होने पर स्ट्रिंग कैसा दिखता है, मैं दोबारा जांच करूंगा। –

उत्तर

9

अगर यह आपकी मदद करता है मैं नहीं जानता:

>>> shlex.split(raw_args, posix=False) 
['-path', '"\\\\server\\folder\\file.txt"', '-arg', 'SomeValue'] 
0

इस प्रयास करें:

raw_args = r'-path "\\\\server\\folder\\file.txt" -arg SomeValue' 

नोट आर उद्घाटन एकल उद्धरण से पहले।

+0

स्ट्रिंग एक फ़ाइल से आता है, इसलिए दुर्भाग्य से यह कोई विकल्प नहीं है। –

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