2013-10-30 22 views
8

Sadece işleri düzgün yapmanın bir ipucuna ihtiyacım var.subprocess.Popen: Bir listeyi argüman olarak nasıl geçebilir

Script.py adlı bir betiğimde, argüman olarak ["name1", "name2", vb.) Bir liste listesi kullandığını varsayalım.

Bu komut dosyasını alt işlem modülünü kullanarak başka bir komut dosyasından çağırmak istiyorum. subprocess.Popen yöntemi, argüman olarak dizeleri listesini gerektirdiğinden çalışmıyor Tabii

myList = ["name1", "name2", "name3"] 
subprocess.Popen(["python", "script.py", myList]) 

: Yani ne yapmak istiyorsunuz şudur. yüzden aşağıdakileri yaparak kabul: Artık süreç başlar

subprocess.Popen(["python", "script.py", str(myList)]) 

ama bir argüman olarak dize ve bir liste olduğu için çalışmıyor. Bunu nasıl düzeltebilirim?

cevap

19

+ işlecini kullanarak bunları birleştirin. Aynı piton programı kullanmak istiyorsanız

myList = ["name1", "name2", "name3"] 
subprocess.Popen(["python", "script.py"] + myList) 

BTW, sys.executable ile "python" değiştirin.

+0

veya '.extend() işlevini kullanın. –

+0

@NiklasR veya '+ list (myList)' – falsetru

+1

'extend', yalnızca aramadan önce adlandırılmış bir listeyi değiştirirseniz kullanışlıdır. [altprocess.Popen (["python", "script.py"]. uzat ((myList)) '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' argümanının ilk ve tek argümanı olarak '' uzatma '' değerini döndürür. – chepner

1

Hızlı cevap için teşekkürler falsetru. Doğrudan çalışmıyor ama nasıl yapılacağını anlıyorum. Sen öneri yapmakla eşdeğerdir konum: Benim asıl listede yer alan dizeleri 3 argümanları var

subprocess.Popen(["Python","script.py","name1","name2","name3"]) 

.

benim script.py dosyasında yapmanız gereken aşağıdaki işlemleri yaparak alınan her tartışmadan yeni bir liste oluşturmaktır:

myList = sys.argv[1:] 

myList şimdi başlangıçta vardı daha aynıdır! Daha önce bunu düşünmek niye

["name1","name2","name3"] 

bilmiyorum! Ek argümanların türünden emin değilseniz,

İlgili konular