2015-02-25 4 views
0

Я пытаюсь запустить сценарий python, расположенный в папке на моем сервере из другого сценария python. Местоположение сценария, который я пытаюсь запустить, не находится в том же месте, что и существующий скрипт. Сценарий, который я пытаюсь выполнить, не является функцией, которую мне просто нужно запустить, как только первая завершится, и я знаю, что они оба работают независимо друг от друга. Я нашел similar post, но я получаю ошибку Not Found, когда я использую либо os.system, либо subprocess.Popen.Запуск скрипта из сценария Python

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

Это то, что у меня есть пробовали:

subprocess.Popen("/home/xxx/xxxx/xxx/xx/test.py") 

os.system("/home/xxx/xxxx/xxx/xx/test.py") 

subprocess.Popen("/home/xxx/xxxx/xxx/xx/test.py", shell=True) 
+0

os.chdir() позволит вам перейти к местоположению другого скрипта python – heinst

+0

Как вы думаете, что происходит при запуске файла * .py? Очевидно, что test.py не имеет интерпретатора python в его исходном коде ... –

+0

@NSH неверно работает сценарий test.py – risail

ответ

0

для сценария, который делает операции, связанные с его местоположением, вы хотите, чтобы сначала получить текущий каталог вы при помощи originalDir = os.path.dirname(full_path). Затем вы хотите использовать os.chdir('/home/xxx/xxxx/xxx/xx/'), а затем выполните subprocess.Popen("python test.py", shell=True) для запуска скрипта. Затем сделать os.chdir(originalDir), чтобы вернуться в каталог вы когда-то были в

0

Вы могли бы попробовать что-то вроде этого:.

original_dir = os.getcwd() 
script_paths = ["/...path1.../script1.py", "/...path2.../script2.py", "/...path3.../script3.py"] 

for script_path in script_paths: 
    base_path, script = os.path.split(script_path) 
    os.chdir(original_dir) 
    subprocess.Popen(script) 


os.chdir(original_dir) 
0

Чтобы запустить скрипт как подпроцесс в его каталоге, используйте cwd параметр:

#!/usr/bin/env python 
import os 
import sys 
from subprocess import check_call 

script_path = "/home/xxx/xxxx/xxx/xx/test.py" 
check_call([sys.executable or 'python', script_path], 
      cwd=os.path.dirname(script_path)) 

Отличие от решения os.chdir() заключается в том, что chdir() вызывается только в дочернем процессе. Родительский рабочий каталог остается прежним.

sys.executable - это исполняемый файл python, выполняющий родительский скрипт Python. Если test.py имеют правильный набор shebang, и у файла есть права на выполнение, вы можете запустить его напрямую (используйте [script_path]безshell=True).