erwartete ich ein einfaches Skript, einen SQL-Skript aus Pythonsubprocess.call läuft nicht wie
subprocess.call([
'sqlcmd',
'-S', 'server_name',
'-d', 'db name'
'-i', r'path to the script + script name'
])
Der Python-Skript ohne Fehler läuft zu nennen, aber nie ruft der SQL-Skript. Ich kann das SQL-Skript über die Befehlszeile sqlcmd "path to the script + script name"
ausführen und es funktioniert wie erwartet.
Ich kann eine gespeicherte Prozedur aufrufen, die subprocess
Modul ohne Probleme verwenden,
subprocess.Popen([
'sqlcmd',
'-S', 'server_name',
'-d', 'db name'
'-Q', 'exec stored procedure'
])
aber ein separates Skript gibt Aufruf keine Ergebnisse. Ich habe versucht, einschließlich shell = True
oder Popen
verwenden, aber nichts ändert sich.
Um weitere Tests durchzuführen, habe ich ein Testskript erstellt, das nur den Namen der aktuellen Datenbank zurückgibt. Ich lief es ohne Probleme durch die Befehlszeile sqlcmd -S server_name -d db_name -i "directory/test1.sql"
, das erwartete Ergebnis erhalten. Ich habe versucht, es mit subprocess
Modul zu starten und habe mein Problem erneut, habe ich versucht subprocess.call_check
und habe einen Fehler unter Angabe exit status 1
. Also das Skript läuft mit der Kommandozeile, aber nicht mit subprocess
Modul.
Was * passiert *? Erhalten Sie einen Fehler? Oder tut es einfach nichts? Sind Sie sicher, dass das Argument, das Sie an "-i" übergeben, korrekt ist? Hast du kontrolliert? – larsks
Wenn ich 'print' Anweisungen vor und nach dem subprocess.call gebe, bekomme ich beide Anweisungen ausgedruckt, keine Fehler. Das Argument in "-i" ist korrekt, denn wenn ich genau dasselbe Argument über die Befehlszeile 'sqlcmd 'Pfad zum Skript + Skriptnamen' liefere, lasse ich das Skript laufen. Wenn das Argument in "-i" falsch war, würde ich einen Fehler erhalten. – AK9309