файл не найден в запущенном скрипте оболочки через python

У меня есть скрипт python, в одной части кода, нужно выполнить команду терминала это код:

# run shell script and return response printed
def run_shell(command_string):
    p = subprocess.Popen([command_string], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    return p.communicate()

это определенная функция, которая получает команду и выполняет ее. например, при вводе «найти» (для рекурсивного перечисления файлов и dirs) выводится:

./actions
./actions/scripts
./actions/scripts/script_aa00.py
./log_list_template.json
./README.md
./.git
./main
./main/Classifier.py
./main/Solver.py
./main/learner.py
./main/Database.py
./main/__pycache__
./main/__pycache__/Database.cpython-35.pyc
./main/__pycache__/learner.cpython-35.pyc
./start.sh
./run.py
./signals
./signals/scripts
./signals/scripts/script_aa00.py  [I want to run this script]
./signals/list0.json
./signals/template.json

но когда вход «python3 signals/scripts/script_aa00.py» вывод содержит ошибку, которая означает script_aa00.py не найден. когда я пробую «python3 signals/scripts/script_aa00.py» сам в терминале (в этом реж.) работает отлично

1 ответ

  1. Можно попытаться добавить shell=trueв Popen и / или использовать абсолютные пути:

    p = subprocess.Popen(['/usr/bin/python3', '/home/.../signals/scripts/script_aa00.py'], shell=true, stdout=subprocess.PIPE, ...)