Я действительно застрял в проблеме, я надеюсь, кто-то может мне помочь. Я пытаюсь создать оболочку в 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
в командную строку? Я ОЧЕНЬ высоко ценю любую помощь, которую вы можете предоставить. Заранее спасибо.
Вам нужно удалить stdout = subprocess.PIPE. Делая это, отключите стандартный вывод вашего процесса из stdout 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)
Попробуйте сделать вашу команду в одну строку:
cmd = 'spooky_path -a start -b end'
process = subprocess.Popen(cmd, shell=True)
"spooky_path -a start -b end"
.
-b
.
spooky
, а не когда вы указываете ему полный путь ... очевидная причина в том, что полный путь неверен.