Path: csiph.com!news.mixmin.net!news.unit0.net!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Hermann Riemann Newsgroups: de.comp.lang.python Subject: Re: [Python-de] strings zusammensetzen. Date: Thu, 31 Aug 2017 14:40:26 +0200 Lines: 42 Message-ID: References: <40c6ccec-4cbc-9614-dbdd-9e88cd1dccf0@gmx.de> <4247d63f-f9f9-2915-2cb8-8be9f4302564@behnel.de> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Trace: individual.net 5NBpixyq+VBxKLPLChJr3wr4Gz8IvDJLfQrc6e6ETGzSq1TFBb Cancel-Lock: sha1:SCCuqVI2T7PyuF1OGBCEp95gPXQ= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 In-Reply-To: Content-Language: de-DE Xref: csiph.com de.comp.lang.python:4891 Am 30.08.2017 um 21:24 schrieb Peter Otten: >>>> der wegen des Lernaufwandes und Manual Suchens >>>> lieber os.system("rm "+dateiname) >>>> als os.unlink(dateiname) verwendet. >>> os.unlink() dürfte aber portabler sein und auch mit Leerzeichen und >>> anderen speziellen Zeichen in dateiname zurechtkommen. Wer weiss, was >>> die Shell so treibt. >> Bei Risisko halt: >> os.system('rm "'+dateiname+'"') > Das nützt nix. Sobald Dritte den Dateinamen bestimmen können, bekommst du > Probleme: > $ cat demo.py > import glob > import os > > for filename in os.listdir(): > if not filename.endswith(".py"): > print("removing", repr(filename)) > os.system("rm '" + filename + "'") > $ touch foo\'\ -f\;echo\ \'oops > $ python3 demo.py > removing "foo' -f;echo 'oops" > oops > $ ok. Allerdings fällt mir bei der Gelegenheit ein, was ist, wenn der Dateiname ein bytestring ist, der sich nicht nach utf konvertieren lässt? In C ist ja als Dateiname alles außer '/' und '\0' erlaubt. Hermann der bisher bytestring lediglich zum Vergleich von Dateiinhalten verwendet hat. -- http://www.hermann-riemann.de