Ich stelle eine flask-App bereit, in der ein multiprocessing.Process gestartet wird. Innerhalb dieses Prozesses rufe ich einen Shell-Befehl durch subprocess.call() auf. Das Skript läuft gut, wenn auf dem lokalen Host ausgeführt werden, wenn sie mit nginx und gunicorn eingesetzt, verhält sich der Kolben app wie erwartet, bis die Subprozess beginnt, dann erhalte ich das folgende Fehlerprotokoll:Unerwartetes Verhalten beim Aufrufen des Shell-Befehls für eine bereitgestellte Webanwendung
DEBUG:root:start to run command
DEBUG:root:(<class 'FileNotFoundError'>, FileNotFoundError(2, "No such file or directory: 'java -jar ábsolute/path/to/jar/file')
Process(
target=decode_upload,
args=(
path_to_blf,
path_to_dbc_folder,
path_to_splitted,
path_to_decoder,
system_layout,
dc_doc,
dc_id,
file_type,
)
).start()
Hier ist der rellevant Teil der Funktion.
def decode_file(
path_to_blf,
path_to_dbc_folder,
path_to_splitted,
path_to_decoder,
system_layout=DEFAULT_SYSTEM_LAYOUT):
command = "{} {} --blf={}".format(
SOFTWARE_COMMAND,
path_to_decoder,
path_to_blf
)
for dbc_file_name in DBC_FILE_NAME_LIST:
command += " --dbc={}".format(
os.path.join(
path_to_dbc_folder,
dbc_file_name
)
)
command += " --out={}".format(path_to_splitted)
logging.debug("start to run command")
subprocess.call(command)
logging.debug(f)
logging.debug("run command end")
def decode_upload(
path_to_blf,
path_to_dbc_folder,
path_to_splitted,
path_to_decoder,
system_layout,
dc_doc,
dc_id,
file_type):
logging.basicConfig(filename='flask.log',level=logging.DEBUG)
logging.debug('This message should go to the log file')
try:
decode_file(
path_to_blf,
path_to_dbc_folder,
path_to_splitted,
path_to_decoder,
system_layout)
except:
logging.debug(sys.exc_info())
Der Prozess schlägt fehl, wenn diese Zeile erreicht wird.
subprocess.call(command)
Wenn ich versuche, den "Befehl" von der Befehlszeile aufzurufen, funktioniert es ohne ein Problem.
Hallo, danke für die Antwort. Ja, der Fehler verschwindet, aber der Befehl wird immer noch nicht ausgeführt. Ich fange die stdout von diesem Befehl mit p = subprocess.run ("ls", Shell = True, stdout = PIPE), logging.debug (p.stdout). Aber ich habe eine Nachricht DEBUG: root: b '' ", was nichts in der Protokolldatei bedeutet. Es scheint, der Befehl wurde nicht ausgeführt. –
Was ist der Fehler, den Sie jetzt bekommen –
Nein, Fehler mehr, aber kein Befehl hat Ich habe versucht os.system (Befehl) und nichts passiert, aber wenn ich Befehl im Terminal laufen funktioniert es einwandfrei –