Python - есть ли другой способ запуска сценария python из сценария python, кроме os.system? - PullRequest
0 голосов
/ 06 декабря 2018

Есть ли другой способ запустить скрипт python из скрипта python, кроме os.system?В конце сценария Python я попытался запустить другой сценарий Python, но я столкнулся с ошибкой прав доступа.Это может быть просто из-за моего доступа, или, может быть, есть лучший способ запустить это в Cloudera Data Science Workbench, где я не сталкиваюсь с проблемой разрешений?

num_of_rows_parsed_url_df = len(parsed_url_df)
num_not_on_maj_one_mil = len(parsed_url_df[parsed_url_df.GlobalRank == 1000001])
print "Number of Rows: ",num_of_rows_parsed_url_df
Number of Rows:  34091
print "Number of Requests not on the Majestic Million: ", num_not_on_maj_one_mil
Number of Requests not on the Majestic Million:  17613

import os
os.system("Proxy/Proxy_Analytics/AWS_API_Cost.py")
32256sh: 1: Proxy/Proxy_Analytics/AWS_API_Cost.py: Permission denied
os.system("Proxy/Proxy_Analytics/AWS_API_Cost.py 1")
32256sh: 1: Proxy/Proxy_Analytics/AWS_API_Cost.py: Permission denied

1 Ответ

0 голосов
/ 06 декабря 2018

Мало того, что os.system не единственный способ, это особенно плохой способ.os.system представляет собой угрозу безопасности, и ее следует избегать почти в 100% случаев.

То, что вы хотите, звучит как subprocess.run.Если вы хотите запустить другой скрипт Python, используя тот же интерпретатор, который выполняет текущий, вы можете сделать:

import os
import subprocess
import sys

subprocess.run([sys.executable, os.path.abspath('path/to/script.py')])

При этом вы уверены, что хотите запустить другой скрипт как отдельный процесс ?Скорее всего, лучшим решением было бы извлечь повторно используемую библиотеку функций Python и import эту библиотеку в ваши различные сценарии.

Создание и упаковка коллекции модулей Python вМногоразовая библиотека может быть нетривиальной задачей, потому что она перемещает вас от «коллекции несвязанных скриптов» к «пакетному программному продукту».Если у вас есть сценарии, которые должны начать обмениваться деталями реализации, то вам, вероятно, следует начать думать о разделяемом коде как о библиотеке.

...