Sh: Script.py: команда не найдена

Я написал скрипт Script.py. В этом скрипте я начинаю инициализировать некоторые переменные, далее есть 7 классов и в конце запускаю церебро для тестирования акций:

> if __name__ == '__main__':
>     cerebro = bt.Cerebro()
>     ...
>     ...

Если я запускаю скрипт вручную, бэктест работает отлично, и я получаю именно те результаты, которые мне нужны. Но если я хочу запустить этот скрипт из другого скрипта следующим образом:

import os
import Backtest
os.system('Backtest.py')

для этого я поместил все скрипты в одну папку и импортировал каждый скрипт в Runner Script. Каждый скрипт работает отлично, только скрипт Backtest.py выдает сообщение об ошибке

sh: Backtest.py: команда не найдена

Я также должен упомянуть, что все другие сценарии (которые работают и также могут выполняться сценарием запуска через os.system ) не содержат классов и «if name == 'main':».

Кто-нибудь знает, почему этот скрипт backtest.py не найден и как я могу решить эту проблему?

с наилучшими пожеланиями

os.system('python Backtest.py')
ssp 20.12.2020 13:10

Если у вас есть несколько интерпретаторов Python (python 2, python 3, виртуальные/conda envs, ...), вы можете использовать sys.executable, чтобы получить путь к текущему интерпретатору. os.system(sys.executable + " Backtest.py") будет учитывать это.

Niklas Mertsch 20.12.2020 13:16
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
540
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что лучший способ добиться того, что вы пытаетесь сделать, если вы запускаете скрипт python, вызывая: другую оболочку, другой интерпретатор python (который не обязательно совпадает с тем, с которым вы запускаете свой скрипт), было бы переместить ваш main в main() функции, а затем из другого скрипта import и вызвать как обычную функцию. Таким образом, вместо sys.executable у вас будет:

if __name__ == '__main__':
    Backtest.main()

os.system — это довольно странный способ вызова исполняемого файла в целом: пожалуйста, используйте модуль subprocess в будущем

Какое это имеет отношение к проблеме? subprocess более универсален, но использование os.system совершенно нормально в тех случаях, когда оно делает именно то, что требуется.

Niklas Mertsch 20.12.2020 13:47

Спасибо, Никола! Это решило мою проблему :=) Я сделал "if name == 'main':" частью метода main(), а затем вызвал этот метод в этом скрипте. После этого я мог бы использовать: if name == 'main': Backtest.main() в своем скрипте запуска :) И вы думаете, что я должен запускать эти скрипты с подпроцессом в случае os.sys? лучшие рагарды!

chrissi2909 20.12.2020 15:00

Другие вопросы по теме