psql: J'ai rencontré une erreur d'option non valide.

Quand j'ai essayé d'exécuter psql indirectement en utilisant subprocess.check_output (), j'ai rencontré l'erreur " psql: option invalide - '' ' ". Je ne pouvais pas comprendre ce qui n'allait pas avec ce message seul, alors j'ai essayé différentes choses pour en découvrir la cause.

En conséquence, j'ai trouvé qu'il y avait un problème avec la façon de créer des arguments.

problème

J'ai exécuté une commande en Python qui répertorie à distance les utilisateurs sur le serveur PostgreSQL.

Code de problème 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

Exécution de la commande (erreur)


[user001@localhost ~]$ python psql01.py 
['psql', '-U postgres', '-d postgres', '-t ', '-c select * from pg_user;']
psql:Option invalide-- ' '
Le détail est"psql --help"S'il te plait regarde.

Solution

La méthode de création du deuxième argument de check_output () défini dans la variable cmd de l'exemple de code ci-dessus a été modifiée.

check_syntaxe de sortie


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

Par exemple, lors de l'analyse d'une ligne de commande (avec getopt etc.) en langage bash ou C, il interprète les caractères vides comme des délimiteurs, mais check_output () semble avoir des éléments de liste comme éléments d'argument. Pour le dire mal, check_output () ne semble pas traiter les caractères vides comme des délimiteurs.

C'est peut-être la bonne façon d'utiliser

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

C'est acceptable

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

environnement

Supplément

Recommended Posts

psql: J'ai rencontré une erreur d'option non valide.
J'obtiens une erreur avec les pandas d'importation.
J'ai eu une erreur lors de l'enregistrement avec OpenCV
J'obtiens une erreur avec toutes les commandes yum
J'ai eu une erreur lors de l'utilisation de Tensorboard avec Pytorch
J'ai eu une erreur lorsque j'ai exécuté composer global require laravel / installer
Quand j'obtiens une erreur avec Pylint sur Windows Atom
J'obtiens une erreur en essayant d'installer maec 4.0.1.0 avec pip
J'ai envoyé un SMS avec Python
J'ai eu une erreur lorsque j'ai exécuté meteor add accounts-password
J'ai eu une erreur liée à SSL avec l'installation de pip, donc je l'ai résolue.
J'ai essayé d'envoyer un SMS avec Twilio
J'ai eu une erreur lorsque j'ai mis opencv dans python3 avec Raspeye [Remedy]
Je souhaite envoyer Gmail avec Python, mais je ne peux pas en raison d'une erreur
Écrivons FizzBuzz avec une erreur: Version Python
Je veux être OREMO avec setParam!
Revenir en arrière lorsqu'une erreur se produit avec le tissu
J'ai essayé d'envoyer un email avec SendGrid + Python
Je souhaite envoyer un message d'erreur en japonais avec le formulaire de changement de mot de passe django
J'ai eu une erreur lorsque j'installe des pandas sur Mac, alors je l'ai traitée