Как ссылаться на файлы в модуле подпроцесса - PullRequest
0 голосов
/ 07 января 2020

У меня есть код, который написан на Python и Go, со следующей структурой папок ниже. Например, в sub_mod_a в py_file.py есть функция PyFunction(), которая ссылается и запускает go_file.go локально, используя модуль subprocess, как показано ниже:

proc = subprocess.Popen(
            ["go", "run", "go_file.go"],
            stdout=subprocess.PIPE,
        )

Структура папок выглядит следующим образом:

.
├── mod                           
|   └── sub_mod_a  
|       ├── py_file.py
|       └── go_file.go          
|   ├── sub_mod_b                 
│   └── sub_mod_c                                      
└── examples
    └── example.ipynb                  

Теперь в записной книжке Jupyter в examples/ я вызываю PyFunction, выполняя

import sys  
sys.path.insert(0, "..")

from mod.sub_mod_a.py_file import PyFunction

PyFunction()

Однако файл go не кажется, бежать. Я думаю, что это может быть потому, что подпроцесс запускает процесс в .., который является каталогом root. Как я могу исправить эту проблему, чтобы пользователю не приходилось менять ссылку на go_file.py на абсолютную в py_file.py?

1 Ответ

1 голос
/ 07 января 2020

Я бы не стал связываться с sys.path и вместо этого предоставлял бы текущий рабочий каталог Popen:

import os

proc = subprocess.Popen(
            ["go", "run", "go_file.go"],
            stdout=subprocess.PIPE,
            cwd=os.path.dirname(__file__)
        )

или использовал бы полный путь к файлу go

import os

path = os.path.join(os.path.dirname(__file__), 'go_file.go')
proc = subprocess.Popen(
            ["go", "run", path],
            stdout=subprocess.PIPE,
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...