2014-10-18 2 views
1

Я пытаюсь запустить команду оболочки из python и получить синтаксические ошибки. Вероятно, это связано с тем, что есть вложенные кавычки, но я не могу понять, как заставить его работать.Подпроцесс Python дает синтаксическую ошибку, но запускается из оболочки

Вот команда:

In [44]: command 
Out[44]: '/Applications/itt/idl/bin/idl -e "print, barycorr(2456718.886512, 16.109814, -36.799472, 0, obsname=\'CTIO\')"' 

In [45]: print command 
/Applications/itt/idl/bin/idl -e "print, barycorr(2456718.886512, 16.109814, -36.799472, 0, obsname='CTIO')" 

Когда я запускаю команду, используя любой из двух ниже, я получаю ошибку синтаксиса в IDL:

subprocess.call(command, shell=True) 
subprocess.call(shlex.split(command)) 

Если я запускаю команду (выход из [45]) из командной строки, он отлично работает. Любая идея, что я делаю неправильно?

Спасибо!

+0

Пожалуйста, разместите полный ответ. –

ответ

1

Попробуйте построить свой список вручную, например .:

cmd_lst = ['/Applications/itt/idl/bin/idl', 
      '-e', 
      ("print, barycorr(2456718.886512, 16.109814, -36.799472, 0," 
      " obsname='CTIO')"), 
      ] 

subprocess.call(cmd_lst) 

Я расщепляется длинную строку на две строки. Скобки заключаются в том, что они обрабатываются как одна и та же строка, даже если они охватывают несколько строк. В качестве побочного эффекта пропуски для одиночных кавычек могут быть опущены, если они не нужны вызываемой программе.

+1

Это именно то, что делает shlex, также работает с оболочкой = True означает, что вам не нужно разделить команды –

+0

@PadraicCunningham: Правильно. Но из-за дополнительной вилки со всеми накладными (+ evtl. Риски безопасности для непроверенных команд оболочки) я бы не стал по умолчанию. Ручное построение списка позволяет фактически понять/увидеть, что происходит за сценой, без дополнительного слоя безвестности, который я счел полезным в объяснении. –

+0

Спасибо, Дон, это сработало. Я думаю, что разделение длинной строки - вот что изменило ситуацию, так как мне не нужно было скрывать цитаты. – kgully

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