Path: csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail From: robert Newsgroups: de.comp.lang.python Subject: [Python-de] probleme mit python 3 popen Date: Sun, 23 Sep 2018 16:08:13 +0200 Lines: 42 Message-ID: References: <33920c93-417b-ef60-4f54-cdfb878ed21c@redcor.ch> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Trace: news.uni-berlin.de 5nVvQT3hrHOBl7fMNMyCbQM0sGF78wQA5lI8h4IdJGEg== Return-Path: X-Original-To: python-de@python.org Delivered-To: python-de@mail.python.org User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 Content-Language: de-CH X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: python-de@python.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Die Deutsche Python Mailingliste List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: <33920c93-417b-ef60-4f54-cdfb878ed21c@redcor.ch> Xref: csiph.com de.comp.lang.python:5242 Hoi zäme, ich bin dabei scripts von v2 auf v3 zu konvertieren. Jetzt habe ich ein Problem mit popen: ich konstruiere einen Popen-Aufruf wie folgt: Zuerst suche ich wo der virtualenvwrapper installiert ist: cmd =['/bin/bash', '-c', 'echo $(which virtualenvwrapper.sh)'] p =subprocess.Popen(cmd, stdout=PIPE) virtualenvwrapper =p.communicate()[0].strip() Dann bastle ich einen bash Aufruf, in dem Virtualenvwrapper aktiv ist, und nutze diesen um einen Eintrag beim Virtualenwrapper zu löschen. Dieses Vorgehen ist nötig, weil sonst bash virtualenvwrapper nicht kennt. Hier der Popen-Aufruf: commands =""" export WORKON_HOME=%(home)s/.virtualenvs\n export PROJECT_HOME=/home/robert/Devel\n source %(virtualenvwrapper)s\n rmvirtualenv %(site_name)s """%{ 'home': os.path.expanduser("~"), 'virtualenvwrapper': virtualenvwrapper, 'site_name': site_name } p =subprocess.Popen( '/bin/bash', stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True) out, err =p.communicate(commands.encode()) Das funktionierte mit Python 2.7 gut. Der einzige unterschied war, dass ich p.communicate(commands), anstelle von p.communicate(commands.encode()) aufrufe. In Python 3 Bekomme ich folgende Fehlermeldung: /bin/bash: line 6: b/home/robert/.virtualenvs/workbench/bin/virtualenvwrapper.sh: No such file or directory es scheint das b vor b/home/robert/.. zu sein, dass den Fehler hervorruft. Wie muss ich vorgehen, um dieses Problem zu vermeiden? Wenn ich dem Command string zuerst redigiere: commands =commands.replace("b'/home", "'/home").encode() funktionierts, aber das kann ja keine Lösung sein. Danke Robert