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
Du müsstest wahrscheinlich einfach das hier: Am 23.09.18 um 16:08 schrieb robert:
virtualenvwrapper =p.communicate()[0].strip()
um ein .decode(sys.getfilesystemencoding()) am Ende ergänzen. Ich würde aber statt dem ersten Popen einfach shutil.which() verwenden (ab Python 3.3 verfügbar):
import shutil shutil.which('virtualenvwrapper.sh') '/usr/bin/virtualenvwrapper.sh'
Chris
danke beide Methoden haben geklappt robert On 23.09.2018 16:21, Christopher Arndt wrote:
Du müsstest wahrscheinlich einfach das hier:
Am 23.09.18 um 16:08 schrieb robert:
virtualenvwrapper =p.communicate()[0].strip() um ein .decode(sys.getfilesystemencoding()) am Ende ergänzen.
Ich würde aber statt dem ersten Popen einfach shutil.which() verwenden (ab Python 3.3 verfügbar):
import shutil shutil.which('virtualenvwrapper.sh') '/usr/bin/virtualenvwrapper.sh'
Chris _______________________________________________ python-de maillist - python-de@python.org https://mail.python.org/mailman/listinfo/python-de
-- Robert Rottermann CEO 031 333 10 20 robert@redo2oo.ch mailto:robert@redo2oo.ch Sickingerstrasse 3, 3014 Bern http://maps.apple.com/?q=Sickingerstrasse%203,3014%20Bern https://Redo2oo.ch https://redo2oo.ch *Ihr Partner wenn es um ERP Lösungen geht.*
danke beide Methoden haben geklappt robert On 23.09.2018 16:21, Christopher Arndt wrote:
Du müsstest wahrscheinlich einfach das hier:
Am 23.09.18 um 16:08 schrieb robert:
virtualenvwrapper =p.communicate()[0].strip() um ein .decode(sys.getfilesystemencoding()) am Ende ergänzen.
Ich würde aber statt dem ersten Popen einfach shutil.which() verwenden (ab Python 3.3 verfügbar):
import shutil shutil.which('virtualenvwrapper.sh') '/usr/bin/virtualenvwrapper.sh'
Chris _______________________________________________ python-de maillist -python-de@python.org https://mail.python.org/mailman/listinfo/python-de
Das liegt wahrscheinlich daran, dass die home Variable mit bytes oder
bytearray statt mit str gefüllt ist.
Bei Python 3 ist ja schließlich str(b"foo") "b'foo'" statt "foo".
robert
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 _______________________________________________ python-de maillist - python-de@python.org https://mail.python.org/mailman/listinfo/python-de
participants (4)
-
Christopher Arndt
-
Kaeptm Blaubaer
-
robert
-
robert