Exécuter des commandes Bash en Python

sur ma machine locale j'exécute un script python qui contient cette ligne

bashCommand = "cwm --rdf test.rdf --ntriples > test.nt"
os.system(bashCommand)

ça marche très bien.

puis j'exécute le même code sur un serveur et je reçois le message d'erreur suivant

'import site' failed; use -v for traceback
Traceback (most recent call last):
File "/usr/bin/cwm", line 48, in <module>
from swap import  diag
ImportError: No module named swap

donc ce que j'ai fait alors est que j'ai inséré un" print bashCommand " qui m'imprime ensuite la commande dans le terminal avant de l'exécuter avec os.système.)(

bien sûr, je reçois à nouveau l'erreur (causée par OS.system (bashCommand)) mais avant cette erreur il imprime la commande dans le terminal. Ensuite, j'ai juste copié que la production et fait un copier coller dans le terminal et appuyez sur entrée et ça fonctionne...

est-ce que quelqu'un a une idée de ce qui se passe: (?

165
demandé sur codeforester 0000-00-00 00:00:00

2 réponses

N'utilisez pas os.system . Il a été déprécié en faveur de subprocess . Du docs : "ce module entend remplacer plusieurs anciens modules et fonctions: os.system , os.spawn ".

comme dans votre cas:

bashCommand = "cwm --rdf test.rdf --ntriples > test.nt"
import subprocess
process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
209
répondu user225312 2018-01-12 08:54:47

Appel avec des processus secondaire

import subprocess
subprocess.Popen("cwm --rdf test.rdf --ntriples > test.nt")

l'erreur que vous obtenez semble être parce qu'il n'y a pas de module swap sur le serveur, vous devriez installer swap sur le serveur puis exécuter le script à nouveau

35
répondu Jakob Bowyer 2010-11-23 12:43:27