[PYTHON] psql: Ich bin auf einen ungültigen Optionsfehler gestoßen.

Als ich versuchte, psql indirekt mit subprocess.check_output () auszuführen, stieß ich auf den Fehler " psql: Ungültige Option - '' ' ". Ich konnte nicht allein herausfinden, was mit dieser Nachricht falsch war, also habe ich verschiedene Dinge versucht, um die Ursache herauszufinden.

Als Ergebnis stellte ich fest, dass es ein Problem beim Erstellen von Argumenten gab.

Problem

Ich habe in Python einen Befehl ausgeführt, der Benutzer auf dem PostgreSQL-Server remote auflistet.

Problemcode psql01.py


#!/usr/bin/env python

import subprocess

cmd = [
    'psql',
    '-U ' + 'postgres',
    '-d ' + 'postgres',
    '-t ',
    '-c ' + 'select * from pg_user;'
]
try:
    result = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
    result = e.output

print result

Befehlsausführung (Fehler)


[user001@localhost ~]$ python psql01.py 
['psql', '-U postgres', '-d postgres', '-t ', '-c select * from pg_user;']
psql:Ungültige Option-- ' '
Detail ist"psql --help"Bitte sehen Sie.

Lösung

Die Methode zum Erstellen des zweiten Arguments von check_output (), das in der cmd-Variablen des obigen Beispielcodes festgelegt ist, wurde geändert.

check_Ausgabesyntax


subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)

Wenn Sie beispielsweise eine Befehlszeile (mit getopt usw.) in Bash- oder C-Sprache analysieren, werden leere Zeichen als Trennzeichen interpretiert, aber check_output () scheint Listenelemente als Argumentelemente zu haben. Um es schlecht auszudrücken, check_output () scheint Leerzeichen nicht als Trennzeichen zu behandeln.

Vielleicht ist dies der richtige Weg

cmd = [
    'psql',
    '-U' , 'postgres',
    '-d' , 'postgres',
    '-t',
    '-c' , 'select * from pg_user;'
]

Das ist in Ordnung

cmd = [
    'psql',
    '-U' + 'postgres',
    '-d' + 'postgres',
    '-t',
    '-c' + 'select * from pg_user;'
]

Umgebung

Ergänzung

Recommended Posts

psql: Ich bin auf einen ungültigen Optionsfehler gestoßen.
Ich erhalte eine Fehlermeldung beim Import von Pandas.
Beim Speichern mit OpenCV ist ein Fehler aufgetreten
Ich erhalte eine Fehlermeldung mit allen yum-Befehlen
Bei der Verwendung von Tensorboard mit Pytorch ist ein Fehler aufgetreten
Ich habe eine Fehlermeldung erhalten, als ich Composer Global Require Laravel / Installer ausgeführt habe
Wenn ich eine Fehlermeldung mit Pylint unter Windows Atom erhalte
Beim Versuch, maec 4.0.1.0 mit pip zu installieren, wird eine Fehlermeldung angezeigt
Ich habe eine SMS mit Python gesendet
Ich habe eine Fehlermeldung erhalten, als ich Meteor Add Accounts-Passwort ausgeführt habe
Ich habe einen SSL-bezogenen Fehler bei der Pip-Installation erhalten und ihn behoben.
Ich habe versucht, eine SMS mit Twilio zu senden
Ich habe eine Fehlermeldung erhalten, als ich opencv mit Raspeye in Python3 eingefügt habe [Remedy]
Ich möchte Google Mail mit Python senden, kann dies jedoch aufgrund eines Fehlers nicht
Schreiben wir FizzBuzz mit einem Fehler: Python-Version
Ich möchte OREMO mit setParam sein!
Rollback, wenn beim Stoff ein Fehler auftritt
Ich habe versucht, eine E-Mail mit SendGrid + Python zu senden
Ich möchte eine Fehlermeldung auf Japanisch mit dem Django-Passwortänderungsformular ausgeben
Ich habe eine Fehlermeldung erhalten, als ich Pandas auf einem Mac installiert habe, also habe ich mich damit befasst