2011-05-31 16 views
5

Olası Çoğalt:
Full command line as it was typedPython'da ORIGINAL komut satırı nasıl alınır? vb Boşluklar, ile

sys.argv zaten çift tırnak, çift boşluk ve belki de sekme karakterleri (bütün bağlıdır kaybetmeden, dizi ayrıştırılır OS/kabuk, tabii ki).

Ayrıştırmadan önce orijinal dizeye nasıl erişebilirim?

+0

Şimdiye kadar verilen yanıtlardan hiçbiri asıl soruyu yanıtlamıyor: Unix'te origianl komut satırı argümanları sys.argv içinde. Ne var ki, pencerelerinizde, her uygulamanın kendi ayrıştırma işlemini yapması beklenen bir komut satırı dizginiz var. (Geriye: Biliyorum.) Bu soruya verilen cevap, uygulanabilir olduğunda orijinal komut satırı dizesinin nasıl alınacağını önermelidir. – Arafangion

cevap

0

Bunu açıkça yapamazsınız, çünkü bir kabuk bağımsız değişkenleri bir programa nasıl geçirir.

0

sys.argv, tüm python var. Kabuk, dosya isimlerini (globs), parametre (değişken) genişlemesini, tırnakları ve kelime bölme işlemlerini python işlemine geçirmeden önce işledi (unix; Windows'da aslında onu ayrıştıran başlangıç, ama taşınabilirlik için, güvenemezsiniz Bu konuda). Ancak, POSIX kabuk alıntılama kurallarının istediğiniz karakterleri iletmeye izin verdiğini unutmayın (dizeleri sonlandıran NUL baytları hariç).

Python'dan subprocess.call kullanarak veya shell argüman kümesini kullanarak bir işlem başlatmayı deneyin. shell=False ile başlayan dizgiler, shell=True dizgisi, kendi kurallarına göre yorumlayan kabuğa aktarılırken, başlatılan işlemdeki (betik yolundan başlayarak; python tarafından işlenen parametreler kaldırılır), sys.argv dizgisinde ortaya çıkan şeydir. .

+1

"Sys.argv tam olarak sahip olduğunuz şey" doğru değil. CPython yürütülebilir komutu komut satırını ayrıştırır ve 'sys.argv', belirli kurallara göre doldurur. Örneğin 'python -c cmd': cmd'' sys.argv'de olmayacaktır. –

+0

@ Jan-PhilipGehrcke: Resmi olarak, siz haklısınız. Ama burada alakalı olduğunu düşünmüyorum. Komut dosyası için sahip olduğunuz şey (komut dosyası adı genişletildi) olacak ve komut satırı komutları, tek bir satırda python'u kopyalamanın neredeyse imkansız olduğu için pek kullanışlı değil. –

+1

Haklısınız, ancak komut satırı argümanlarının kodlama/kod çözme, yorumlama ve yeniden yorumlama ve farklı seviyelerde her tür dönüşümle dolu olduğunu vurgulamak için her fırsatı kullanıyorum. tam olarak ne var ":-). Aşağı oyumu şimdi biraz sert buldum, ama artık kaldıramıyorum, üzgünüm. –

3

Kısaca, yapmazsınız.

Uzun: Unix komut satırı, çağıran program tarafından ayrıştırıldı ve python başladığında, zaten komut satırına ayrıştırıldı.

PS. Windows'da mümkündür, ancak sanırım genel bir cevap arıyorsunuz.

+0

https://msdn.microsoft.com/en-us/library/windows/desktop/ ms683156% 28v = VS.85% 29.aspx – Arafangion

İlgili konular