2015-01-14 4 views
1

Надеюсь, вы, ребята, можете мне помочь с этой проблемой, потому что я действительно застрял ... Я пытаюсь выполнить программу из python и по какой-то причине, он не работает. Сценарий расположен по адресу:Python не может выполнить терминальный скрипт, используя sh или bash

path/to/teqc 

Я добавил эту строку в файл .bashrc:

alias teqc='path/to/teqc' 

и, когда я бегу

teqc -tr d input >output

на терминал, то работает отлично ... но, если я запускаю его в программе python, он показывает:

sh: teqc: command not found 

кода Я использую на питоне:

os.system('teqc -tr d input >output') 

Я попытался с помощью

subprocess.Popen('teqc -tr d input >output', shell=True, executable="/bin/bash") 

, но единственный результат был изменить сообщение об ошибке

/bin/bash: teqc: command not found 

Любых помощь была бы действительно оценена :)

PD Я забыл указать, операционная система Fedora 21

+0

'/ путь/к/teqc' не может быть такой же, как' путь/к/teqc'. Это опечатка в вашем вопросе? – Isaac

+0

Вы можете просто добавить '/ path/to' в свою переменную' PATH', которая может (а может и не быть) быть более элегантной. – ShellFish

+0

@ Исаак Да, извините за это. Это просто опечатка. –

ответ

2

Я бы предложил создать символическую ссылку на вашу программу.

ln -s /path/to/teqc /usr/bin/teqc 
+0

Это работает! Большое спасибо.Теперь я просто должен изменить код, чтобы создать символическую ссылку на каждом компьютере, на котором запущен скрипт. Я очень благодарен :) –

+0

Ницца, +1 для элегантного решения! – ShellFish

0

Я думаю, проблема в том, что переменная окружения PATH не совпадает с тем, что вы запускаете команду в коде с помощью подпроцесса.

  1. Одним из решений будет иметь мягкую ссылку в как это было предложено в предыдущем ответе
  2. Другое, что вы можете сделать, это иметь свой код установки среды перед выполнением вашей команды с помощью подпроцесс модуль ОС поставляется есть словарь os.environ, который может быть использован для добавления путь, используя что-то вроде этого

    import os 
    import subprocess 
    os.environ['PATH'] += ":/path/to/teqc" 
    subprocess.Popen(['teqc -tr d input'],stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True) 
    
Смежные вопросы