Помогите с переносом инструмента командной строки в Python - PullRequest
1 голос
/ 26 августа 2011

Я действительно застрял с проблемой, я надеюсь, что кто-то может помочь мне с этим.Я пытаюсь создать оболочку в Python3.1 для программы командной строки под названием spooky.Я могу успешно запустить эту программу в командной строке следующим образом:

$ spooky -a 4 -b .97

Моя первая попытка обертки Python для привидения выглядела так:

import subprocess

start = "4"
end = ".97"

spooky_path = '/Users/path/to/spooky'
cmd = [spooky_path, '-a', start, '-b', end]
process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
process.wait()
print('Done')

Код выше печатает Done,но не выполняет программу spooky

Далее я попытался просто выполнить программу в командной строке следующим образом:

$ /Users/path/to/spooky -a 4 -b .97

Приведенный выше код также не работает и не предоставляет полезных ошибок.

Мой вопрос: как я могу заставить Python запустить эту программу, отправив spooky -a 4 -b .97 в командную строку?Я ОЧЕНЬ высоко ценю любую помощь, которую вы можете оказать.Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 26 августа 2011

Вам нужно удалить stdout = subprocess.PIPE. Это отсоединяет стандартный вывод вашего процесса от стандартного Python и делает его доступным с помощью функции Popen.communicate (), например:

import subprocess

spooky_path = 'ls'
cmd = [spooky_path, '-l']
process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
output = process.communicate()[0]
print "Output:", output
process.wait()
print('Done')

Для прямой печати вы можете использовать его без аргумента stdout:

process = subprocess.Popen(cmd)

Или вы можете использовать функцию вызова:

process = subprocess.call(cmd)
0 голосов
/ 26 августа 2011

Попробуйте сделать вашу команду в одну строку:

cmd = 'spooky_path -a start -b end'
process = subprocess.Popen(cmd, shell=True)
...