(geloest) Fehlermeldung in os.py "Invalid syntax"

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
cptnofuture
User
Beiträge: 14
Registriert: Donnerstag 17. Juli 2008, 15:51

Moin!

Eine kleine konkrete Frage zu meinem Code:

Ich moechte aus einem Python-Skript heraus ueber subprocess ein Programm mit Argumenten aufrufen. Dabei scheint das Programm, dass ich aufrufen moechte einen Fehler zu verursachen:

Traceback (most recent call last):
File "<string>", line 1, in ?
File "/usr/local/Modeller/modeller9v4/modlib/modeller/__init__.py", line 45, in ?
import os.path, re, sys
File "/usr/lib/python2.5/os.py", line 134
from os.path import (curdir, pardir, sep, pathsep, defpath, extsep, altsep,
^
SyntaxError: invalid syntax

Rufe ich das Programm aus der Kommandozeile heraus auf, gibt es diesen Fehler nicht. Mein Code sieht wie folgt aus:

Code: Alles auswählen

...
cmd2 = "modeller "+top
p = subprocess.Popen(cmd2, shell=True,stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.wait()
...
Benutze ich subprocess falsch? Oder liegt es an dem Programm, das ich ausfuehren moechte?

Vielen Dank schonmal,
cpt
Zuletzt geändert von cptnofuture am Freitag 15. August 2008, 11:28, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

cptnofuture hat geschrieben:Benutze ich subprocess falsch?
Das auch, man sollte ``shell=True`` soweit es geht vermeiden:

Code: Alles auswählen

p = subprocess.Popen(['modeller', top], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
Zu deinem anderen Problem fällt mir momentan auch nichts ein.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
cptnofuture
User
Beiträge: 14
Registriert: Donnerstag 17. Juli 2008, 15:51

Moin!

Benutze ich shell=False, bekomme ich diese Fehlermeldung:

File"/people/bigcat/sschneider/workspace/ptools/branches/sschneider/Homology/ModellerStartUp.py", line 107, in callModeller
p = subprocess.Popen(cmd2, shell=False,stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
File "/usr/lib/python2.5/subprocess.py", line 593, in __init__
errread, errwrite)
File "/usr/lib/python2.5/subprocess.py", line 1051, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

Muss ich dann das cmd2 irgendwie noch anpassen?

EDIT: Ups, kleiner Tippfehler.... aber ich bekomme die gleiche Fehlermeldung wie im ersten Post beschrieben...

Gruss,
cpt
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Die Py-Datei muss ausführbar sein und wenn sie nicht in $PATH liegt, muss man eben den Pfad angeben, relativ oder absolut. Also ``os.path.abspath('modeller')`` oder ``'./modeller'``. Wenn die Datei nicht ausführbar ist, kann man auch ``sys.executable`` als auszuführende Datei an `Popen` übergeben.

Edit: Argh. abspath natürlich, nicht basename.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
BlackJack

@cptnofuture: Kann es sein, dass Du versuchts in einem älteren Python das `os`-Modul von Python 2.5 zu importieren? Die Klammern beim ``from ... import ...`` waren früher nämlich syntaktisch nicht erlaubt.
cptnofuture
User
Beiträge: 14
Registriert: Donnerstag 17. Juli 2008, 15:51

Moin!

Das koennte sein... hab sowas schon geahnt.... Aber was ich dagegen tun soll, weiss ich nicht genau. Ich hab Python2.5 installiert.
Kann es sein, dass das Python Programm "modeller", dass ich aus meinem Python heraus aufrufe, in einer frueheren Version geschrieben ist und es deshalb nicht funktioniert? Wenn ja, was koennte ich tun, damit es funktioniert?

Gruss,
cpt
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wie wäre es das Programm via ``python2.5 /pfad/zu/modeller`` aufzurufen?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Du nutzt MODELLER???? Version >= 9???? Warum überhaupt mit subprocess?

Was passiert, wenn Du im Interpreter

Code: Alles auswählen

>>> import modeller
eingibst? Gibt es Probleme? Falls ja: auf welchem Weg hast Du MODELLER installiert?

Gruß,
Christian

PS Du weißt, dass es für MODELLER eine Mailingliste gibt? In der Regel gibt es dort schnelle und kompetente Hilfe.
PPS Ich verwende MODELLER mit Python 2.5.
cptnofuture
User
Beiträge: 14
Registriert: Donnerstag 17. Juli 2008, 15:51

Moin!

@Leonidas:
Dann bekomme ich eine Fehlermeldung: No such file or directory von subprocess.
Muss ich das dann anders aufrufen?

@CM:
Jepp Modeller9v4. (zumindest wuerde ich das gerne...)

Wollte es dann auch den anderen Weg versuchen und es direkt aus Python aufrufen, aber bei

Code: Alles auswählen

import modeller
kommt:

Traceback (most recent call last):
File "/people/bigcat/sschneider/workspace/ptools/branches/sschneider/Homology/gui.py", line 3, in <module>
import ModellerStartUp
File "/people/bigcat/sschneider/workspace/ptools/branches/sschneider/Homology/ModellerStartUp.py", line 6, in <module>
from modeller.automodel import *
File "/people/bigcat/sschneider/bin/modeller9v4/modlib/modeller/__init__.py", line 59, in <module>
import _modeller
ImportError: libmodeller.so.3: cannot open shared object file: No such file or directory

Hab den GENERIC UNIX installer genommen und bin nach Anleitung verfahren, inklusive der Compilierung zu 2.5 mit SWIG. Kann gut sein, dass ich dabei irgendwo einen Fehler gemacht habe.

Habe PYTHONPATH und LD_LIBRARY_PATH in meiner .cshrc gesetzt (ist das der richtige Ort dafuer? Bin Linux/Unix Neuling):
setenv LD_LIBRARY_PATH "/people/bigcat/sschneider/bin/modeller9v4/lib/i386-intel8"
setenv PYTHONPATH "blahblah:/people/bigcat/sschneider/bin/modeller9v4/modlib:
/people/bigcat/sschneider/bin/modeller9v4/lib/i386-intel8/python2.5"

Durch die Mailinglist habe ich mich gestern Nachmittag und heute Vormittag gewuehlt, aber alle Versuche, die ich unternommen habe, sind bisher gescheitert. Wenn ich es bis heute Abend nicht hinbekommen habe, werde ich eventuell mal reinschreiben und hoffen, dass die wissen woran es liegt.

Aber vielleicht kannst Du mir ja schon helfen, ich bin in LINUX/UNIX nicht so bewandert und arbeite mich auch da gerade erst ein, vielleicht ist es wirklich nur ein Installationsproblem. Wie hast Du das denn gemacht?

Vielen Dank Euch allen fuer die Hilfe bei so einem speziellen Problem,
cpt
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

cptnofuture hat geschrieben:Dann bekomme ich eine Fehlermeldung: No such file or directory von subprocess.
Muss ich das dann anders aufrufen?
Anders als wie? Du musst schon den Code posten, wie du es machst, sonst kann man dir schlecht helfen. Ich schätze aber mal, dass du ``subprocess.Popen(['python2.5 /pfad/zu/modeller', '...']...)`` verwendest; das geht so nicht, es muss ``subprocess.Popen(['python2.5', '/pfad/zu/modeller', '...']...)`` lauten.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

cptnofuture hat geschrieben: Habe PYTHONPATH und LD_LIBRARY_PATH in meiner .cshrc gesetzt (ist das der richtige Ort dafuer? Bin Linux/Unix Neuling):
setenv LD_LIBRARY_PATH "/people/bigcat/sschneider/bin/modeller9v4/lib/i386-intel8"
setenv PYTHONPATH "blahblah:/people/bigcat/sschneider/bin/modeller9v4/modlib:
/people/bigcat/sschneider/bin/modeller9v4/lib/i386-intel8/python2.5"
Kann sein, kann aber auch nicht sein: Welche shell benutzt Du denn? (Bist Du alleine an der Maschine? Nein? Dann frage Deinen Admin, ob er/sie Dir helfen kann.)
Außerdem: Ich würde nicht einfach PYTHONPATH und LD_LIBRARY_PATH überschreiben! Besser ist es die PATHes an den jeweiligen PATH anzuhängen. In csh:
setenv SOMEPATH ${SOMEPATH}:new/path
in bash:
export SOMEPATH="${SOMEPATH}:new/path"
(An Alle: Korrekt?)

Mache mal echo $PYTHONPATH und echo $LD_LIBRARY_PATH . Was siehst Du?

An Leonidas & cptnofuture: Das ist kein Problem von subprocess. MODELLER wird nicht mehr als "Programm", sondern als Pythonmodul aufgerufen. Man schreibt ein Pythonskript. Punkt. Die "alten" Versionen von MODELLER hatten eine eigene Skriptsprache - auch da wäre subprocess kaum sinnvoll einzusetzen gewesen. IMHO ist ein Aufruf mit subprocess ohnehin nicht zielführend.

Gruß,
Christian

PS Du hast das install-Skript ausgeführt und es kam zu keinen Fehlermeldungen? Ist wirklich alles korrekt eingestellt?
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Nachtrag, als Beispiel aus meiner .bashrc:

Code: Alles auswählen

#for Modeller
export PATH="${PATH}:/home/cm/bin/modeller9v2/bin/mod9v2"
export PYTHONPATH="${PYTHONPATH}:/home/cm/bin/modeller9v2/modlib"
export PYTHONPATH="${PYTHONPATH}:/home/cm/bin/modeller9v2/lib/i386-intel8"
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/home/cm/bin/modeller9v2/lib/i386-int
el8"
(Bin noch auf 9.2 stehen geblieben: Schon eine Weilchen nicht mehr gemodellt ;-) .)
cptnofuture
User
Beiträge: 14
Registriert: Donnerstag 17. Juli 2008, 15:51

Hallo!

Oke, dann werde ich das mit subprocess wieder vergessen. Sonst wurden immer .top files uebergeben, von denen hier noch einige rumfliegen. Dann werde ich die aber lieber einlesen und mir passend machen.

Anscheinend hatte ich einen Fehler mit den Pfaden gemacht. Nachdem ich, wie CM beschrieben hat, PYTHONPATH und LD_LIBRARY_PATH nicht ueberschrieben sondern angehaengt habe, erkannte er das Modul auch und ich kann es jetzt aus Python heraus nutzen. Allerdings scheine ich bei meiner Aktion den License Key geloescht zu haben :shock: aber den finde ich schon wieder/beantrage ich neu...

Ich denke, das Problem ist damit (hoffentlich) geloest und hat mir zu der Einsicht verholfen doch mal mehr auf mein Betriebssystem einzugehen.

Vielen Dank fuer Eure Hilfe!
cpt
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

cptnofuture hat geschrieben: Nachdem ich, wie CM beschrieben hat, PYTHONPATH und LD_LIBRARY_PATH nicht ueberschrieben sondern angehaengt habe, erkannte er das Modul auch und ich kann es jetzt aus Python heraus nutzen. Allerdings scheine ich bei meiner Aktion den License Key geloescht zu haben :shock: aber den finde ich schon wieder/beantrage ich neu...
Ah, freut mich. Der Key ist immer derselbe, weil nur ein pro-forma-Schlüssel. Könnte ich auch direkt zusenden. Aber ist auch schnell wieder beantragt.

Bei zukünftigen MODELLER-Fragen bist Du natürlich auch hier willkommen, wenn sich die Fragen eher um Python drehen. Ansonsten wird man Dir auf der Mailingliste eher helfen können. (Hier weiß außer mir wahrscheinlich niemand wie man Gaußsche-Abstandsrestraints oder ähnlichen Kram definiert... ;-) ) Eine Anmerkung vorweg: Die Python-Beispiele im Tutorial sind gut, aber simple. Eine Besonderheit ist das Fehlen von __init__-Methoden der MODELLER-Klassen - muß man sich dran gewöhnen. Ist auch irgendwie einfacher. Aber man kann sehr viel mehr aus MODELLER rausholen, wenn man richtig Python kann.

Viel Erfolg!
Christian
cptnofuture
User
Beiträge: 14
Registriert: Donnerstag 17. Juli 2008, 15:51

Moin!

Den Key habe ich mir nochmal zuschicken lassen, hat keine halbe Stunde gedauert, bis ich ihn hatte.

Im Moment laeuft es gut, brauche nicht viel von Modeller, aber vielleicht aendert sich das ja nochmal. Eigentlich mache ich grade nur noch Schoenheitskorrekturen an meinem Skript und bin dann erstmal fertig. Die Beispiele und die Referenzen von Modeller hab ich mir schon grob angeschaut und das genommen, was ich brauche.

Einzig was mir fehlt ist, dass man kein Output directory mehr angeben kann, anscheinend hat das niemand ausser mir fuer nuetzlich empfunden. Naja, jetzt muss ich nach dem modelln halt aufraeumen...

Jetzt heisst es skript laufen lassen, auf Modeller warten und Ergebnisse ansehen...

Vielen Dank nochmal,
cpt
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Schön, aber das stimmt nicht:
cptnofuture hat geschrieben:Einzig was mir fehlt ist, dass man kein Output directory mehr angeben kann, anscheinend hat das niemand ausser mir fuer nuetzlich empfunden. Naja, jetzt muss ich nach dem modelln halt aufraeumen...
Du kannst in Deinem Pythonskript natürlich einen Ausgabepfad spezifizieren: Entweder wechselst Du im Skript mehrfach das cwd oder Du kopierst bereits im Skript Deine Dateien in den Zielordner. Besser ist die erste Variante oder gleich das Skript im Zielordner zu starten. Und ja, das fehlt irgendwie doch in MODELLER ;-)

Anmerkungen:
- Bloß nicht die Beispiele 1:1 übernehmen. Jeder Fall liegt anders. Um optimale Ergebnisse zu erzielen, mußt Du die Anleitung durchlesen.
- Nicht nur ein paar Modelle kreieren. Besser ist es viele zu kreiren und zu schauen, was am besten ist.
- Insb. beim Loopmodelling kann MODELLER Probleme mit der Topologie des Backbones haben.

Gruß,
Christian
cptnofuture
User
Beiträge: 14
Registriert: Donnerstag 17. Juli 2008, 15:51

Moin!

Joa, mit aufraeumen meinte ich, ich lasse das Skript fuer mich aufraeumen :wink: man ist ja doch faul...

zu den Anmerkungen:
- Hab mich natuerlich nur grob an den Beispielen orientiert und an meine Beduerfnisse angepasst

- Im Moment mach ich mir 100 Modelle (so als default) und berechne mir ne Durchschnittsstruktur... ob das wirklich das ist, was ich spaeter brauche weiss ich noch nicht, bin grade erst am Anfang meiner Arbeit damit. Aber ich hielt es fuer eine gute Idee...

Gruss,
cpt
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Wie berechnet man denn eine "Durchschnittsstruktur"?
Einfach das arithmetische Mittel der Koordinaten ist keine gute Idee, weil:
  • - in das Mittel "falsche" Strukturen eingehen können. Dann hast Du am Ende ein wunderschönes Mittel, dem Du das nicht mehr ansiehst.
    - Was erzählt Dir ein Mittelwert?
    - Die Standardabweichung wäre nicht proportional dem RMSD!
Denke es ist besser das "beste" Modell - zum Beispiel über den DOPE-Score und visuelle Abschätzung - zu nehmen und ggf. eine kurze MD-Simulation zur Energieminimierung zu machen. Aber auch hierbei vorsicht: Bei sehr großer Ähnlichkeit zu den Templates, machst Du Dein Ergebnis eher schlechter als besser.

Gruß,
Christian - der denkt, dass es jetzt wirklich eher was für die Mailingliste wäre ...
Antworten