2011-08-04 18 views
9

Şu gibi görünen komut satırından çalıştırdığım bir programım var:Başka bir program çalıştırmak için python kullanma?

$ program a.txt b.txt

Program argüman olarak iki metin dosyası gerektirir. Yukarıdaki programı çalıştırmak için bir Python 3.2 betiği yazmaya çalışıyorum. Bunu nasıl yapabilirim? Şu anda subprocess modülünü şu şekilde kullanmaya çalışıyorum:

import subprocess 

with open("a.txt", mode="r") as file_1: 
    with open("b.txt", mode="r") as file_2: 
     cmd = ['/Users/me/src/program', file_1, file_2] 
     process = subprocess.Popen(cmd, stdout=subprocess.PIPE) 
     for line in process.stdout: 
      print(line) 

this post okudum ve here yazıyor. Ne yazık ki, bu mesajları okuduktan sonra, hala Python kodumu programımı çalıştırıyor gibi görünmüyorum.

Yardımcı olabilecekler var mı? Şimdiden teşekkürler!

cevap

14

subprocess.Popen dizeleri bir dizi bekliyor. Bu dizideki öğelerin ikisi dosya tanıtıcısıdır. Çalışmaya çalıştığınız programın asıl dosyasını geçirmeniz gerekiyor.

cmd = ['/Users/me/src/program', 'a.txt', 'b.txt'] 

tamamen with open(...) as ... çizgilerin kurtulabilirsiniz.

+0

Yardımınız için teşekkür ederim, bir şekilde 'subprocess.Popen() 'ifadesiyle dizeleri dosya tanıtıcıları gerektirmiyor. Çözümün bir cazibe gibi çalıştı! – drbunsen

5

Gereksinimlerinize bağlı olarak, os.system(cmdline) simples çözümü olabilir. Ayrıca

13

@Chris's answer bakın ve:

altişlem sona komuta beklemez, böylece wait yöntemi kullanmak gerekir.

process = subprocess.Popen(cmd, stdout=subprocess.PIPE) 
    process.wait() 
    for line in process.stdout: 
     print(line) 
+2

'Bekle 'yöntemini işaretlediğiniz için teşekkür ederim - bunun farkında değildim. – drbunsen

+0

Hala çalışıyorken çizgiler istiyorsanız, cevabımı bakın. – agf

İlgili konular