2013-08-08 3 views
0

Я пытаюсь вызвать скрипт python в другом скрипте python. Каталоги разные. Я попробовалВызвать скрипт python в скрипте python

import subprocess 
subprocess.call("C:\temp\hello2.py", shell=True) 

Но ничего не получил. Это не работает. Я просмотрел много форумов, но все они касаются вызова, когда оба сценария находятся в одном каталоге.

Я пробовал иметь оба сценария в том же каталоге. В этом случае я могу запустить модель в Python.exe (через окно cmd), но не в IDLE. В IDLE я даже не получаю сообщение об ошибке.

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

+1

Прежде всего используйте необработанную строку. –

+1

«ничего не получил»? Даже сообщение об ошибке? – geoffspear

ответ

6

Побег обратный слэш (\)

"C:\\temp\\hello2.py" 

или использовать сырые строки

r"C:\temp\hello2.py" 

>>> print "C:\temp\hello2.py" 
C:  emp\hello2.py 
>>> print "C:\\temp\\hello2.py" 
C:\temp\hello2.py 
>>> print r"C:\temp\hello2.py" 
C:\temp\hello2.py 
+0

Отлично! Большое спасибо. –

1

Первый обратный слеш вещь, и второе, вы должны всегда вызов питон сценарии с интерпретатор python. Вы никогда не знаете, что связано с *.py файлами. Итак:

import sys 
import subprocess 
subprocess.call([sys.executable, 'C:\\temp\\hello2.py'], shell=True) 
+0

Я внес эти изменения. Он работал нормально. Спасибо! –

+0

Хотя иногда это подходит, это неверно, если вы хотите вызвать сторонние модули python, ожидающие другую версию python. Система, зарегистрированная на python, не обязательно является плохим. – tdelaney

1

Я не уверен, что вы имеете в виду под "я не могу определить другой сценарий как другой модуль, и т.д. Мне нужно вызвать скрипт, в другом сценарии., Но я думаю, что вы может избежать всего бизнеса подпроцесса, просто импортируя ваш другой скрипт python, как в this answer.

т.е.

import imp 

hello2 = imp.load_source("hello2", 'C:\temp\hello2.py') 

Это должно запустить hello2.py сценарий - извините, если я недопонимание ограничения вашей ситуации.

1

Я думаю, что мы можем пойти на подход, изменив список sys.path.

import sys 
sys.path.append("C:\\temp\\") 
import hello2 
Смежные вопросы