2013-10-30 21 views
8

Ho solo bisogno di un suggerimento su come fare le cose correttamente.subprocess.Popen: come passare un elenco come argomento

Dire che ho uno script chiamato script.py che utilizza un elenco di nomi come argomento ["nome1", "nome2", ecc.].

Voglio chiamare questo script da un altro script utilizzando il modulo subprocess. Quindi quello che vorrei fare è la seguente:

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

Certo che non funziona perché il metodo subprocess.Popen richiede una lista di stringhe come argomenti. Così ho pensato di fare quanto segue:

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

Ora inizia il processo, ma non funziona perché ha una stringa come argomento e non una lista. Come dovrei correggerlo correttamente?

risposta

19

Concatenarli utilizzando l'operatore +.

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

A proposito, se si desidera utilizzare lo stesso programma Python, sostituire "python" con sys.executable.

+0

o '.extend()' se non si è sicuri del tipo di argomenti aggiuntivi. –

+0

@NiklasR o '+ list (lista personale)' – falsetru

+1

'extend' è utile solo se si modifica un elenco con nome prima della chiamata. 'subprocess.Popen ([" python "," script.py "]. extend (myList))' passerebbe 'None' (il valore di ritorno di' extend') come primo e unico argomento a 'Popen()'. – chepner

1

Grazie per la rapida risposta falsetru. Non funziona direttamente ma capisco come fare. Sei suggerimento è equivalente a fare:

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

Dove ho 3 argomenti che sono le stringhe contenute nella mia lista originale.

Tutto quello che ho bisogno di fare nel mio file script.py è quello di costruire una nuova lista da ogni argomento ricevuta effettuando le seguenti operazioni:

myList = sys.argv[1:] 

myList è oggi lo stesso di quello che avevo inizialmente!

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

Non so perché non ci ho pensato prima!

Problemi correlati