2015-06-02 1 views
0

У меня возникли проблемы с запуском простой программы HelloWorld через модуль Pexpect. У меня есть каталог с HelloWorld binary - hw, expect script - m.py и каталог с тем же скриптом внутри.Не удается запустить программу из другого каталога через Pexpect

├── hw 
├── m.py 
├── main.cpp 
└── dir 
    └── m.py 

Вот мой ожидать сценарий:

import pexpect 
child = pexpect.spawn("./hw", cwd = /absolute/path/to/parent/directory") 
child.expect("!") 
print(child.before) 

Если я запустить скрипт из родительского каталога, все работает отлично. Однако, если я запускаю его из любой другой директории, как директории здесь, я получаю следующее сообщение об ошибке:

pexpect.ExceptionPexpect: The command was not found or was not executable: ./hw. 

Как бороться с этим?

Я пробовал это на Mac OS и Ubuntu. Бинарный файл HelloWorld отлично работает, он устанавливается как исполняемый. Python 2.7.6, pexpect 3.3

+2

Я предполагаю, что 'cwd' устанавливается в качестве рабочей директории порожденного процесса, но на самом деле не установлен в качестве рабочего каталога вызывающего процесса. Это означает, что вы не можете использовать './Hw' и должны использовать'/absolute/path/to/parent/directory/hw' в этом аргументе. –

+0

@EtanReisner Я не уверен Если я правильно вас понимаю, но в моем случае аргумент cwd указывает на каталог, в котором находится hw (дерево изображает этот каталог), и я назвал его parent, потому что я пытаюсь запустить скрипт из в нем находится внутреннее устройство, и он терпит неудачу. – Egor

+1

@ Пункт EtanReisner заключается в том, что запуск программы с именем пути../Hw гарантированно завершится неудачей из любого каталога, отличного от того, который содержит 'hw'. –

ответ

2

Для запуска исполняемого файла hw либо его родительский каталог должен находиться в PATH envvar, либо вы должны предоставить полный путь. Если путь относительный (не рекомендуется), то это путь относительно вашего текущего рабочего каталога, независимо от значения cwd.

Если вы хотите запустить hw из своего каталога:

import os 
import pexpect # $ pip install pexpect 

hw = '/absolute/path/to/parent/directory/hw' 
child = pexpect.spawn(hw, cwd=os.path.dirname(hw)) 
# ... 
+0

Это работает. спасибо – Egor