Python läuft anders mit Nohup

1953
ericksonla

Ich habe ein Python-Paket, das gut läuft, wenn ich es starte python -m myproject. Wenn ich aber starte nohup python -m myproject, bekomme ich eine ImportError. Darüber hinaus nohup python3 -m myprojectfunktioniert es beim Starten als normal.

Es scheint, dass das Problem darin besteht, dass mein pythonPython3 ein Alias ​​ist, während der Nohup irgendwie einen nicht standardmäßigen Python verwendet. Warum sollte das sein?

2
Können Sie die folgenden Befehle in Ihrer Shell ausführen und deren Ausgabe veröffentlichen? "welche Python" und "Typ Python" David Grayson vor 7 Jahren 0
@DavidGrayson `python` ist ein Alias ​​unter` / usr / bin / python` in `/ usr / bin / python3` ericksonla vor 7 Jahren 0
Ich bin mir nicht sicher was du meinst. Was ist die Ausgabe der oben genannten Befehle und was ist die Ausgabe von `readlink / usr / bin / python`? Welche Linux / Unix-Distribution verwenden Sie und haben Sie Python mit Ihrem Distributionspaket-Manager installiert? David Grayson vor 7 Jahren 0
typ python >> python ist ein Alias ​​zu `/ usr / bin / python3 '; welcher Python >> / usr / bin / python; readlink / usr / bin / python >> python2.7; Die Tatsache, dass der Typ Python und der Typ des Pythons unterschiedliche Richtungen haben, ist für mich sehr seltsam! ericksonla vor 7 Jahren 0

1 Antwort auf die Frage

2
David Grayson

Ihrer Shell (wahrscheinlich bash) ist ein Alias ​​zugewiesen, so dass pythonder Befehl bei jeder Eingabe am Anfang eines Befehls in geändert wird /usr/bin/python3. Es ist schwer für mich zu sagen, warum Sie diesen Alias ​​haben. Möglicherweise möchte Ihr Systemadministrator, dass jeder standardmäßig Python 3 anstelle von Python 2 verwendet, und dies war der Versuch, dies zu erreichen.

Sie /usr/bin/pythonsind ein symbolischer Link zu einer Python 2-Binärdatei. Das scheint ziemlich normal zu sein. Auf vielen Linux-Distributionen (wie Debian) wird häufig auf pythonPython 2 verwiesen, da Python 3 noch nicht populär genug ist. Das ist jedoch nicht immer der Fall. pythonbezieht sich in Arch Linux auf Python 3.

Wenn ich raten müsste, würde ich sagen, dass der Paketmanager Ihres Systems den symbolischen Link von /usr/bin/pythonbis installiert hat, /usr/bin/python2.7da Python 2 standardmäßig verwendet wird. Aber jemand anderes, der bei der Konfiguration Ihres Systems etwas zu sagen hatte, hat entschieden, dass Python 3 standardmäßig verwendet werden soll. Daher wurde dieser Alias ​​installiert.

Wie Sie sehen, funktioniert der Alias ​​nicht immer. Wenn Sie eingeben nohup python, wird die Schale nicht Ihr Alias erweitern und stattdessen übergibt nur die Zeichenfolge pythonals Argument für den nohupBefehl. Der nohupBefehl muss dann herausfinden, was pythonbedeutet, und alles was er tut, ist auf den PFAD zu schauen; Es kennt keine Shell-Aliase. Es wird /usr/bin/pythonPython 2 für Sie finden und beenden.

Sie können im Handbuch Ihrer Shell nachlesen, welche Dateien beim Start ausgeführt werden (z. B. .bashrc und ähnliches). So können Sie herausfinden, warum Ihre Shell diesen Alias ​​für Python 3 hat. Suchen Sie nach einer Zeile wie dieser:

alias python=python3 

Lesen Sie im Paketmanager des Systems nach, wie Sie herausfinden können, welche Dateien zu welchen Paketen gehören. Dies könnte Ihnen helfen, herauszufinden, warum es einen symbolischen Link für Python 2 gibt. Fragen Sie den Paketmanager, zu welchem ​​Paket der /usr/bin/pythonLink gehört.

Danke für die ausführliche Erklärung! Ich selbst habe `alias python = python3` eingerichtet und erwarte, dass auch` / usr / bin / python` mit python3 verlinkt wird. Nachdem ich nun bewiesen habe, dass ich eine Bedrohung für mein System bin und auch PEP394 entdeckt habe, setze ich es vielleicht auf das Original zurück. ericksonla vor 7 Jahren 1