OSX 10.12
Я пытаюсь запустить скрипт python, который я создал изнутри c, используя вызов execlp()
(в разветвленном потоке). Я могу нормально запустить скрипт через командную строку, но из приложения я получаю сообщение о том, что не могу найти модули. Я даже пытался установить модули глобально, например sudo -H pip install requests
, но модули все еще не найдены. Мой скрипт на python импортирует модули как обычно:
import requests
from bs4 import BeautifulSoup
html = requests.get('https://www.douyu.com/directory/all').text
soup = BeautifulSoup(html, 'html.parser')
urls = soup.select('.play-list-link')
output = '';
output += '[' #open json array
for i, url in enumerate(urls):
channelName = str(i);
channelUrl = 'http://douyu.com' + url.get('href')
output += '{'
output += '\"channelName\":' + '\"' + channelName.encode('utf-8') + '\",'
output += '\"channelUrl\":' + '\"' + channelUrl.encode('utf-8') + '\"'
output += '},'
output = output[:-1] # remove last comma
output += ']' # close json array
print output
Мое выполнение из моего приложения на c ++ выглядит следующим образом (строка execlp()
- это действительно все, что я здесь показываю):
int pid = fork();
switch(pid){
case -1:{
perror("fork");
_exit(EXIT_FAILURE);
break;
}
case 0:{ // child process
// create output file
int out = creat(jsonFilePath.c_str(), S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
if (out == -1){ //if failed to create output file, terminate child process
perror("creat");
_exit(EXIT_FAILURE);
} else {
dup2(out,STDOUT_FILENO); // redirect stdout to output file
execlp("python","python",pythonScript.c_str(), NULL); // exec the command
close(out); // close output file
_exit(0); //exit child process
}
break;
}
default:{
// wait for child process
int status = 0;
waitpid(-1, &status, WNOHANG);
printf("child status:%d\n",status);
break;
}
}
forkOnce_getJson = true;
Как модули могут быть обнаружены другими приложениями, если не глобально, по крайней мере, за пределами virtualenv? Заранее спасибо !!