2015-07-17 2 views
0

У меня есть разветвленный процесс python, который должен выполнить другой скрипт python. Я использую python 2.7 в OpenWRT.Python - Не удается subprocess.call после os.fork()

Traceback (most recent call last): 
    File "./twitter.py", line 61, in <module> 
    subprocess.call(['./tweet.py', text]) 
    File "/usr/lib/python2.7/subprocess.py", line 493, in call 
    return Popen(*popenargs, **kwargs).wait() 
    File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ 
    errread, errwrite) 
    File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child 
    raise child_exception 
OSError: [Errno 2] No such file or directory 
Exception in thread Thread-1 (most likely raised during interpreter shutdown): 
Traceback (most recent call last): 
File "/usr/lib/python2.7/threading.py", line 551, in __bootstrap_inner 

Вот как я раскошелиться процесс:

try: 
pid = os.fork() 
print pid 
if pid > 0: 
    # Exit parent process 
    sys.exit(0) 
except OSError, e: 
    self.logger("Fork failed") 
    sys.exit(1) 

А вот как я пытаюсь вызвать другой сценарий:

subprocess.call(['./tweet.py', text]) 
+2

Вы пропускаете интересную часть TRACEBACK: само исключение. Пожалуйста, добавьте это! Кроме того, используйте форматирование кода ('' '' '' или indentation) для tracebacks вместо blockquotes ('' '' ') для лучшей читаемости. –

+0

Невозможно определить, как отступать с использованием блок-кодов. Кстати, я обновил! – ruggfrancesco

ответ

3
OSError: [Errno 2] No such file or directory 

Эта ошибка говорит, что Python не может найдите файл ./tweet.py. По умолчанию Python выглядит в текущем рабочем каталоге, то есть в директории, из которой сценарий был , называемый. Обратите внимание, что это может быть не то же самое, что каталог, в котором находится скрипт.

Попробуйте поставлять абсолютный путь, или с помощью os.chdir для перехода в каталог, содержащий tweet.py, или строить путь, основанный на его отношении к __file__, путь вызывающего сценария. Например, если tweet.py находится в том же каталоге, что и вызывающий сценарий, вы можете использовать:

tweetpath = os.path.join(os.path.dirname(__file__), 'tweet.py') 
subprocess.call([tweetpath, text]) 
Смежные вопросы