Как передать команду в mongoimport, используя python os.system ()? upsertFields имеет пробелы - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь импортировать файл в mongoDb.

Python 3.7, mongoimport, windows. Он отлично работает с полями без пробелов.

command = '"D:\\Program Files\\bin\\mongoimport.exe" -c _ --mode=merge --upsertFields="Current url",Title -d _  --file="D:\\folder\\folder\\temp.json" --jsonArray'
os.system(command)

Результат: 'D: \ Program' не распознается как внутренняя или внешняя команда,

Я думаю, это может быть связано с экранированием, но не знаю точно.

Я пытался

c2 = ["D:\\Program Files\\bin\\mongoimport.exe", '-c _ --mode=merge --upsertFields="Current url",Title -d _ --file="D:\\audiotorah\\audiotorah\\temp.json" --jsonArray']

import subprocess
subprocess.Popen(c2,stdin=subprocess.PIPE,stdout=subprocess.PIPE, bufsize =0)

Но это никогда не останавливается.

1 Ответ

0 голосов
/ 12 марта 2020

Чтобы избежать экранирования, добавьте r перед строкой, чтобы сделать ее необработанной.

Использование os.system:

import os

command = r'"D:\Program Files\bin\mongoimport.exe" -c _ --mode=merge --upsertFields="Current url",Title -d _ --file="D:\folder\folder\temp.json" --jsonArray'
os.system(command)

Использование subprocess.Popen:

import subprocess, shlex

command = r'"D:\Program Files\bin\mongoimport.exe" -c _ --mode=merge --upsertFields="Current url",Title -d _ --file="D:\audiotorah\audiotorah\temp.json" --jsonArray'
subprocess.Popen(shlex.split(command), stdin=subprocess.PIPE, stdout=subprocess.PIPE)
...