2010-10-20 36 views
11

için subprocess.call çıkış yakalayabilir nasıl ben buna benzer bir çizgi var:, benim kodunda bir dosyaya

rval = subprocess.call(["mkdir",directoryName], shell=True) 

ve bunu 0 veya 1 olup olmadığını görmek için rval kontrol edebilirsiniz Ancak, 1 ise, bir dosya biçiminde "A subdirectory or file ben already exists." komutundan metin almak istiyorum, bu yüzden metnin aynı olduğundan emin olmak istiyorsanız onu başka bir dosyayla karşılaştırabilirim.

böyle bir hattı olması mümkün mü, ama bu çalışmıyor biliyorum

rval = subprocess.call(["mkdir",directoryName], shell=True) >> filename 
bu nedenle olursa olsun komutla ne olur metin filename yakalanır ve rval hala dönüşü vardır

kod?

+0

yinelenen: http://stackoverflow.com/search?q=%5Bpython%5D+subprocess+capture [Çekim alt işlemi çıkış] (arasında –

+0

olası yinelenen http://stackoverflow.com/questions/ 2525263/yakalama -subprocess-output) –

+0

neden Python 'mkdir() 'kullanmıyorsunuz? – ghostdog74

cevap

12
import subprocess 
f = open(r'c:\temp\temp.txt','w') 
subprocess.call(['dir', r'c:\temp'], shell=True, stdout=f) 
f.close() 
+0

Teşekkür ederim, bu işe yarıyor. – Dag

+1

Bu durumda 'shell = True' kullanmanın bir nedeni var mı? Çünkü bunun kötü bir fikir olduğunu okudum (en azından * nix'de). – user225312

+0

@PulpFiction, iki neden: önce orijinal soruya dahil edildi, ikincisi test için bir Windows kabuk komutu kullanıyordum. –

12

altişlem modülü Bunu yapmak için 'check_output' işlevinde inşa etti:

In [11]: result = subprocess.check_output(['pwd']) 

In [12]: print result 
/home/vagrant 
+0

Ama sonra çıkış değerini kaybedersiniz :( – speg

+1

Her ikisine de ihtiyacım olduğunda elçi paketini kullanırım: https://github.com/kennethreitz/envoy – btubbs

+3

Check_output'un sadece mümkün olduğunu unutmayın. 2.7 – Doomsday

8
import subprocess 

try: 
    result = subprocess.check_output(['dir', r'c:\temp'], shell=True) 
    print result 
except subprocess.CalledProcessError as e: 
    return_code = e.returncode 

dönüş kodu sıfır ise Zaten bu durum atar çünkü deneyin catch kullanmak gerekir:), bu tüm

+1

Sadece 'CalledProcessError dışında e: returncode = e.returncode' kullanmak daha kolay olurdu. – orodbhen