2015-03-13 3 views
-4

Я пытаюсь вызвать функцию bash из скрипта python. Однако им только в состоянии вызвать функцию отправки всю строкуПочему функция вызова python не работает?

Это называют это работает

call ("mongoexport -h localhost -d dbinspection -c aggtest -u seppemarotta -p seppemarotta -o aggtest.csv --csv -f \"_id\",\"total_recomendations\"",shell=True) 

Этот вызов не работает, он говорит: «Ошибка разбора командной строки: слишком много позиционных вариантов». Единственное, что я сделал, отправляя каждый параметр в виде вектора, сохраняя поля в переменных.

call(["mongoexport","-h",url,"-d",db,"-c",col,"-u",user,"-p",pw,"-o",filename,"--csv","-f","\"_id\"","\"total_recomendations\""]) 

ответ

2

Вы заблудших в самом конце - то, что должно быть последним в списке, вы написали вместо этого как два пунктов:

"\"_id\"","\"total_recomendations\"" 

Так изменить его (Я бы рекомендовал):

'"_id","total_recomendations"' 

используя одинарные кавычки вокруг него, вам не нужно, чтобы избежать двойных кавычек внутри него, делая целое, ИМХО, более читаемым. Во всяком случае, основная идея состоит в том, что запятая должна быть частью этой строки одной строки, в то время как вы написали ее вместо этого, разделив две строки (элементы списка).

+0

Я вижу, я только что заметил, что этот предмет считается одним, хорошо мы изучаем материал каждый день. Большое спасибо – Giuseppe

+1

@Giuseppe yep, оболочка разбивает аргументы на (неэкранированном) пробеле, а в вашей первой версии этот элемент не содержит пробелов, поэтому оболочка не разделила его. Но избегать «shell = True», почти всегда, намного предпочтительнее. –

Смежные вопросы