Seite 1 von 1

subprocess shell=true

Verfasst: Donnerstag 12. Februar 2015, 14:09
von horko
Hallo,
ich komm irgendwie nicht weiter mit meinen Ansätzen, ich lese überall immer wieder das man auf keinem Fall ein subprocess mit shell=true machen soll.
Was ich auch gerne würde allerdings klappt der subprocess dann nicht mehr, kann mir irgendwas sagen was ich ändern muss damit es klappt, da ich mich schon gerne daran halten würde das ganze zu vermeiden.

Code: Alles auswählen

def resize_picture(pic, path):
    pic_name = os.path.basename(pic)
    pic_name_without_ext = pic_name.rsplit('.',1)[0]
    thumb_size = '640x480'
    cmd = ('/usr/bin/convert+' '+'-quiet'+' '+'-thumbnail'+' '+str(thumb_size)+' '+'-depth 8'+' '+str(pic)+' '+path+'/.thumb/'+str(pic_name_without_ext)+'.png')
    subprocess.call(cmd, shell=True)
Genau genommen ist das schon ziemlich hässlich, das weiß ich, allerdings kenne ich kein build in was sowas könnte.

Re: subprocess shell=true

Verfasst: Donnerstag 12. Februar 2015, 14:22
von EyDu
Du musst es einfach so verwenden, wie es vorgesehen ist. Statt eine Anweisung als String zu übergeben, welchen du dir irgendwie zusammengeschustert hast, musst du die Anweisung einfach als Liste übergeben, welche die einzelnen Argument als Elemente enthält.

In deinem Fall also

Code: Alles auswählen

cmd = ["/usr/bin/convert", "quiet", "-thumbnail", str(thum_size), "-depth", "8", ...]
die call-Funktion kümmtert sich dann um den ganzen Rest.

Re: subprocess shell=true

Verfasst: Donnerstag 12. Februar 2015, 14:31
von horko
wow so einfach, klappt, vielen dank

Re: subprocess shell=true

Verfasst: Donnerstag 12. Februar 2015, 14:34
von BlackJack
@horko: Genau genommen ist der Quelltext im ersten Beitrag syntaktisch kein Python. Das kompiliert so nicht einmal. ;-)

Re: subprocess shell=true

Verfasst: Donnerstag 12. Februar 2015, 14:45
von Sirius3
@horko: und zum Dateinamen zusammensetzten gibt es os.path.join und die ganzen "str" sind alle unnötig.