Meine Frage an dieser früheren Frage zusammenhängt - Python subprocess usagePython-Skript: Ausführen eines Skripts mit mehreren Argumenten subprocess
Ich versuche, diesen Befehl auszuführen Python mit
nccopy -k 4 „http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/ncep.reanalysis2/pressure/air.2014.nc?air[408:603][2][20:34][26:40]“ foo .nc
Wenn ich den obigen Befehl ausführen, sollte ich in der Lage sein, eine Datei namens foo.nc auf meiner Festplatte oder einen Netzwerkfehler zu sehen, der nicht auf diese URL oder Remote-URL nicht gefunden.
Zur Zeit der ESRL NOAA Server ausgefallen ist - so, wenn ich den obigen Befehl ausführen ich
Syntaxfehler, unerwarteten $ end, erwartet SCAN_ATTR oder SCAN_DATASET oder SCAN_ERROR Kontext:^ NetCDF: Zugriffsfehler Ort: Datei nccopy.c; 1348 Leitung
Ich sollte den gleichen Fehler, wenn ich das Python-Skript laufen
Dies ist der Code, den ich habe, und ich bin nicht in der Lage, genau herauszufinden, wie weiter verfahren ist -
Ich versuchte Spaltung " -k 4" in zwei Argumente und die Anführungszeichen zu entfernen und ich immer noch diesen Fehler nccopy: ungültiges Format: 4
Ergebnisse drucken (sys.argv) data.py
[ 'data.py', ' -k ',' 4 ',' http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/ncep.reanalysis2/pressure/air.2014.nc?air[480:603][20:34][26:40] ',' foo.nc ']
import numpy as np
import subprocess
import sys
url = '"http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/ncep.reanalysis2/pressure/air.2014.nc?air[408:603][2][20:34][26:40]"'
outputFile = 'foo.nc'
arg1 = "-k 4"
arg3 = url
arg4 = outputFile
print (input)
subprocess.check_call(["nccopy",arg1,arg3,arg4])
Verwenden Sie zuerst [shlex] (https://docs.python.org/3/library/shlex.html), verwenden Sie zweitens 'Popen()' anstelle von 'check_call()' wenn möglich. Ihr Problem ist auch, dass Sie '-k' und' 4' nicht trennen. Der Subprozess versucht automatisch, für jedes Parameterelement einen Platz einzufügen. Versuchen Sie dies '[" nccopy "," -k "," 4 "]' – Torxed
Auch beim Aufruf von Systembefehlen gilt immer noch die traditionelle Shelllogik, was '' 'ermöglicht das Parsen von Variablen und Zeichen, wo es keine Parameter gibt Wenn Sie den Parameter nicht parsen möchten, würde ich '' 'verwenden, um die Parameter zu umbrechen. – Torxed