2016-02-24 2 views
1

Я пытаюсь запустить файл praat из самого python с подпроцессом, но python (подпроцесс), похоже, не может найти каталог. Я не понимаю, почему, когда я запускаю команду в терминале, она работает отлично. Не можете ли я направлять меня туда, где я ошибаюсь? Это код подпроцессошибка подпроцесса в python

import silex 
import subprocess as sb 
cmd_line = raw_input() 
args = shlex.split(cmd_line) 
p = sb.Popen(args) 

Когда я запускаю его с входом

Praat /Users/admirmonteiro/tmp/tmp.praat 

это ошибка, что я получаю:

Traceback (most recent call last): 
    File "<input>", line 1, in <module> 
    File "/Users/admirmonteiro/anaconda/lib/python2.7/subprocess.py", line 710, in __init__ 
    errread, errwrite) 
    File "/Users/admirmonteiro/anaconda/lib/python2.7/subprocess.py", line 1335, in _execute_child 
    raise child_exception 
OSError: [Errno 2] No such file or directory 

Как уже упоминалось, я бегу команды и они отлично работают в терминале. Я также пытался запустить subprocess.call, но та же ошибка возникает. Я также пробовал с shell = True в качестве аргумента, но также выдает ту же ошибку. Пожалуйста, помогите!

+0

Что возвращает 'то, что Praat' при запуске из командной оболочки вручную? –

+0

Если я наберу его сам, он откроет приложение. Если я открою его с файлом, как я уже упоминал, он запускает файл, который возвращает другой файл. Что, если я это сделаю в терминале, это сработает. – Aboogie

+0

Также, когда я запускаю subprocess.call ([Praat]], я получил ошибку: call ([«Praat»], shell = True) /bin/sh: Praat: команда не найдена 127 это не имеет смысла, потому что когда я запускаю Praat в терминале, он работает. Я запутался. – Aboogie

ответ

1

Введите следующую команду в поле, чтобы получить полный путь к приложению Praat.

whereis Praat 

Затем используйте полный путь в программе python.

+1

note: ' тип Praat' ('whence',' where', 'which') или' command -v Praat' может быть более полезным здесь, чтобы найти полный путь к исполняемому файлу. См. [Что такое команда unix, чтобы узнать, какой исполняемый файл файл cor отвечает на заданную команду?] (http://superuser.com/q/351889/13868) – jfs

+1

Связанный: [Почему бы не использовать «что»? Что использовать?] (Http://unix.stackexchange.com/q/85249/1321) – jfs

+0

Согласно man-страницам 'whereis' проверяет стандартные двоичные каталоги (...), распечатывая пути любого найденного , 'which' найдет программу на пути пользователя. Поэтому 'that', вероятно, лучший выбор, поскольку OP сказал, что он смог запустить его в командной строке. –

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