Ich habe einen sehr seltsamen Fehler. Ich lade große Datenmengen mit psql in eine PG-Datenbank. Eine Funktion in meinem Code führt ALLE Lasten aus. Ein Teil meiner Codebasis ruft die Ladefunktion auf, und es funktioniert JUST gut. Ein anderer Teil ruft die gleiche Funktion mit verschiedenen Daten auf, und der Unterprozessaufruf psql hängt (Timeout muss ihn beenden). Das Ausführen des gleichen Befehl von der Kommandozeile funktioniert gut:Timeout mit Python-Subprozess
Hier mein Code:
myEnv = os.environ.copy()
myEnv["PGPASSWORD"] = <<db password>>
output = None
output = subprocess.check_output(popenArgs, stderr=subprocess.STDOUT, timeout=120, env=myEnv)
Der Timeout-Fehler ist:
Traceback (most recent call last):
File "C:\Data\Dropbox\Engagements\<Client>\Src\prod_db.py", line 102, in _copyFrom
output = subprocess.check_output(popenArgs, stderr=subprocess.STDOUT, timeout=120, env=myEnv)
File "C:\Tools\WinPython-64bit-3.5.1.3\python-3.5.1.amd64\lib\subprocess.py", line 629, in check_output
**kwargs).stdout
File "C:\Tools\WinPython-64bit-3.5.1.3\python-3.5.1.amd64\lib\subprocess.py", line 703, in run
stderr=stderr)
subprocess.TimeoutExpired: Command '"C:/Program Files/PostgreSQL/9.4/bin/psql.exe" -h <<DB LOCATION>> -p 5432 -d forecast_dev -U forecast -v ON_ERROR_STOP=1 -AtXwa -c "\copy di_entities_load from C:\Users\Marc\AppData\Local\Temp\copytempdi_entities_load7.csv with csv"' timed out after 120 seconds
Wenn ich den PGPASSWORD Variable manuell in einem Befehlssatz Zeilenfenster, und kopieren Sie dann und fügen Sie den Befehl in den Fehler in die Befehlszeile, es läuft gut und schnell, Beenden und Zurückkehren nach Abschluss.
Wie bereits erwähnt, funktioniert dieser Code, wenn er von einem anderen Teil meiner Anwendung aufgerufen wird, in eine andere Tabelle mit anderen Daten.
Eine Idee, was würde dazu führen, dass dies fehlschlägt, wenn von Python aufgerufen wird, während es immer noch in der Befehlszeile funktioniert?
Windows 10 Pro, Py3.5, PG 9.4, pg8000 db-Modul.