2014-10-13 2 views
1

Я использую Centos 7.0 и установил Eclipse Kepler в среде Pydev. Я хочу, чтобы запустить простой скрипт с оболочкой через Python, используя подпроцесс следующим образом:Невозможно запустить сценарий оболочки из среды Pydev в Eclipse

import subprocess 
subprocess.call(["./test1.csh"]) 

Это с сценарий оболочки выполняется в терминале, а также, если я запускаю команду, как «LS» или «» PWD тогда я получаю правильные выход, например

subprocess.call(["ls"]) # give me the list of all files 
subprocess.call(["pwd"]) # gives me the location of current directory. 

Но когда я бегу subprocess.call ([ "./ test1.csh"]), я получаю следующее сообщение об ошибке:

Traceback (most recent call last): 
File "/home/nishant/workspace/codec_implement/src/NTTool/raw2waveconvert.py", line 8, in <module> 
    subprocess.call(["./test1.csh"]) 
File "/usr/lib64/python2.7/subprocess.py", line 524, in call 
return Popen(*popenargs, **kwargs).wait() 
File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__ 
errread, errwrite) 
File "/usr/lib64/python2.7/subprocess.py", line 1308, in _execute_child 
raise child_exception 
OSError: [Errno 13] Permission denied 

Где я буду неправильно? Пожалуйста, предложите

+2

Вы установили исполняемый бит для сценария? 'chmod + x test1.csh'? И имеет ли он правильную [shebang] (http://en.wikipedia.org/wiki/Shebang_%28Unix%29) в качестве первой строки? –

+0

Как я уже упоминал в вопросе, он запущен в терминале, то есть с терминалом оболочки, а также файл является исполняемым. – nprak

+0

@nprak: 'subprocess.call()' does * not * запускает любую оболочку по умолчанию. Вы видите '#!/Bin/sh' в начале' test1.csh'? – jfs

ответ

2

Убедитесь, что файл test1.csh является исполнимым. Как прокомментировал Лукас Граф, проверьте первую строчку (#!...).

Чтобы убедиться, что перед запуском через Python запустите его в оболочке.

$ ls -l test1.csh 
... 
$ ./test1.csh 

Текущий рабочий каталог будет отличаться от того, когда вы запустите его в терминале. Укажите полный путь к сценарию оболочки. Или измените конфигурацию рабочего каталога в PyDev.

UPDATE

Prepend исполняемый оболочка:

import subprocess 
subprocess.call(["csh", "./test1.csh"]) 
+0

Как я уже упоминал в вопросе, он запущен в терминале, то есть с терминалом оболочки, а также файл является исполняемым. – nprak

+0

@ user2658684, Что произойдет, если вы укажете полный путь? – falsetru

+0

@falsetrue, Even Если я укажу полный путь, он дает ту же ошибку и просто упоминает, что сценарий оболочки запущен в терминале оболочки c. – nprak

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