2015-01-14 55 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 

我一直在使用Python的代碼是:

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

'/路徑os.environ字典/到/ teqc'可能不一樣'路徑/到/ teqc'。這是你的問題中的拼寫錯誤嗎? – Isaac

+0

你可以在'PATH'變量中加上'/ path/to',這個變量可能會(或者可能不會)更加優雅。 – ShellFish

+0

@Isaac是的,對不起。這只是一個錯字。 –

回答

2

我會建議創建一個符號鏈接到您的程序。

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

它的工作原理!非常感謝你。現在我只需修改代碼就可以在運行腳本的每臺計算機上創建一個符號鏈接。我真的很感謝:) –

+0

不錯,+1優雅的解決方案! – ShellFish

0

我認爲問題是當你使用子進程在代碼中運行命令時,環境變量PATH是不一樣的。

  1. 一個解決辦法是在爲以前的答案
  2. 你可以做其他的事情是讓你的代碼中設置的環境中,您使用子os模塊來執行你的命令之前提出的軟鏈接具有可用於追加使用的東西的路徑是這樣

    import os 
    import subprocess 
    os.environ['PATH'] += ":/path/to/teqc" 
    subprocess.Popen(['teqc -tr d input'],stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)