Попен не может обработать команду, которая запускается в оболочке - PullRequest
0 голосов
/ 22 декабря 2010

Я уже читал предыдущие вопросы, опубликованные по тому же аргументу, но я действительно еще не понял этого.

Я пытаюсь запустить команду, которая работает без проблем из командной строки:

xyz@klm:~/python-remoteWorkspace/PyLogParser/src:18:43>ush -o PPP -p PRD -n log 'pwd'
6:43PM PPP:prd:lgsprdppp:/ama/log/PRD/ppp

но когда я делаю то же самое в python, я всегда получаю ошибки:

stringa = Popen(["ush -o PPP -p PRD -n log 'pwd'"], stdout=PIPE, stdin=PIPE).communicate()[0]

Здесь ошибка.

Traceback (most recent call last):   File "getStatData.py", line 134, in <module>
    retrieveListOfFiles(infoToRetList)   File "getStatData.py", line 120, in retrieveListOfFiles
    stringa = Popen(["ush -o PPP -p PRD -n log 'pwd'"], stdout=PIPE, stdin=PIPE).communicate()[0]   File "/opt/python-2.6-64/lib/python2.6/subprocess.py", line 595, in __init__
    errread, errwrite)   File "/opt/python-2.6-64/lib/python2.6/subprocess.py", line 1092, in _execute_child
    raise child_exception OSError: [Errno 2] No such file or directory

Я пробовал и другие решения, такие как

stringa = Popen(["ush", "-o", "PPP", "-p" "PRD", "-n", "log", '"pwd"'], stdout=PIPE, stdin=PIPE).communicate()[0]

но, похоже, ничего не работает.Я также пытался указать абсолютный путь к ush, но ничего ... Может кто-нибудь объяснить мне, что я делаю не так?

Заранее спасибо, AM.

РЕДАКТИРОВАТЬ: У меня естьСтранная вещь происходит, когда я

which ush

Я получаю

ush: aliased to nocorrect /projects/aaaaaaa/local/ush/latest/ush.py

Но почему тогда это работает ???

!!!Спасибо всем за ответы !!!

Ответы [ 2 ]

2 голосов
/ 22 декабря 2010
Popen(["ush", "-o", "PPP", "-p", "PRD", "-n", "log", "pwd"])

должно быть правильно. Дополнительные кавычки около 'pwd' в команде оболочки делают ее единственным аргументом, но кавычки фактически не передаются. Поскольку вы уже разделяете аргументы, оставьте лишние кавычки.


Видимо (в обновлении от OP) ush - псевдоним оболочки. Таким образом, он расширяется только в оболочке; в другом месте это не сработает. Раскройте это сами:

Popen(["nocorrect", "/projects/aaaaaaa/local/ush/latest/ush.py",
       "-o", "PPP", "-p", "PRD", "-n", "log", "pwd"])
1 голос
/ 22 декабря 2010

Если ush в вашей системе - псевдоним, popen не будет работать.popen требует в качестве первого параметра исполняемый файл: либо абсолютный путь, либо имя чего-либо из вашего PATH.

...