2016-04-05 4 views
0

Ich habe diesen Shell-Skript (durch die Dateinamen genannt depends) gespeichert in meinem $PATH:Wie konvertiert man Python-Listen in eine Shell-lesbare Reihe von Strings?

#!/bin/bash 
for i in "[email protected]" 
do 
    depends=+("nodejs-$i") 
done 
echo $depends 

und der Eingang (dh [email protected]) es ausgelegt ist, ist in dem Beispiel-Format zu nehmen:

'flatten' 'once' 'is-file' 'multistream' 'piece-length' 'junk' 'xtend' 'bencode' 'readable-stream' 'run-parallel 'filestream' 'simple-sha1' 'minimist' 'block-stream2' 

. So würde Ich mag die Abhängigkeiten in einer package.json Datei aufgelistet schreiben zu können, enthielten in der DEP Liste Variable diesen Python-Skript (die die Dateinamen haben npm2.py):

import json 
from sys import argv 
print(argv[1]) 
from subprocess import call 

with open("/home/fusion809/OBS/home:fusion809:arch_extra/nodejs-" + argv[1] + "/src/package/package.json") as json_file: 
    json_data = json.load(json_file) 
    deps = json_data["dependencies"] 
    LEN=len(deps) 
    print(LEN) 
    i=0 
    DEP=list() 
    print(DEP) 
    for key, value in deps.items(): 
     print(key) 
     DEP.append(key) 
     i = i+1 
     print(i) 
     #call(["cpobsn", key, argv[1]]) 
    print(DEP) 
    call("depends", DEP) # returns errors as DEP is a list! 

eine neue Variablen, sagen DEPS , so dass es dann als Eingabe für das Shell-Skript depends verwendet werden kann. Wenn es hilft hier ist mein aktuell DEP Variable, die Ich mag würde auf die Standardausgabe zuvor gezeigt, konvertieren:

['flatten', 'once', 'is-file', 'multistream', 'piece-length', 'junk', 'xtend', 'bencode', 'readable-stream', 'run-parallel', 'filestream', 'simple-sha1', 'minimist', 'block-stream2'] 

Daher bin ich hier zu fragen, wie ich eine Python-Liste in Shell-lesbaren Leerzeichen getrennten Satz umwandeln kann von Saiten.

+0

Ich denke, Sie können in Ihrer Shell-Terminologie verwirrt sein. Ihr Beispielcode übergibt "DEP" an "hängt" als eine Argumentliste, aber Sie sprechen darüber, es in die Standardausgabe zu schreiben. Willst du a) 'npm2.py' aufrufen, kommt' abhängig' von Argumenten? b) Haben 'npm2.py'' DEP' zum Standard out? oder c) habe 'npm2py' invoke' depends', schreibe 'DEP' in 'devens's Standardeingabe? –

+0

Gute Frage, ich werde die Frage entsprechend ändern. Es ist Option a. – BH2017

Antwort

1

subprocess.call nimmt seine Argumente in einer einzigen Liste. Versuchen Sie:

call(["depends"] + DEP)