Das Problem ist, dass Popen
python3
in Ihrem Pfad nicht finden kann.
Wenn der primäre Fehler war, dass hello.py
nicht gefunden wurde, würde diese Fehler hat stattdessen in stderr
(das wird nicht gelesen)
python: can't open file 'hello.py': [Errno 2] No such file or directory
Sie würden nicht eine Ausnahme in subprocess
bekommen, weil python3
hat laufen, aber konnte die auszuführende Python-Datei nicht finden.
Erstens, wenn Sie eine Python-Datei ausführen möchten, ist es besser, es in einem anderen Prozess auszuführen.
Aber wenn Sie das immer noch tun möchten, ist es besser, es mit einer Argumentliste wie dieser auszuführen, damit Leerzeichen richtig behandelt werden und den vollständigen Pfad zu allen Dateien angeben.
import subprocess
proc = subprocess.Popen([r'c:\some_dir\python3',r'd:\full_path_to\hello.py'], stdout=subprocess.PIPE)
tmp = proc.stdout.read()
print(tmp)
Um weiter zu gehen:
- Für
python3
, es wäre gut, es im Systempfad setzen Sie den vollständigen Pfad zu vermeiden, angeben. import subprocess,os
basedir = os.path.dirname(__file__)
proc = subprocess.Popen(['python3',os.path.join(basedir,'hello.py')], stdout=subprocess.PIPE)
tmp = proc.stdout.read()
print(tmp)
auch::
- wie für das Skript, wenn es sich befindet, sagen wir, im selben Verzeichnis und das aktuelle Skript, können Sie den Pfad
verbesserte Code-Schnipsel zu codieren vermeiden Popen
führt eine Art execvp
des ersten übergebenen Arguments aus. Wenn das erste übergebene Argument beispielsweise eine .bat
Datei ist, müssen Sie das cmd /c
Präfix oder shell=True
hinzufügen, um Popen
mitzuteilen, dass der Prozess in einer Shell statt dessen direkt ausgeführt werden soll.
ok, seine Arbeit für meine, ABER , warum, wenn ich laufe proc = subprocess.Popen ([ 'casperjs', os.path.join (basedir, 'casper_script.js')], stdout = subprocess.PIPE) sein Rückkehrfehler – ivan
capserjs ist installieren – ivan
im lösen Problem, wenn addieren "shell = True" – ivan