除了os.system之外,还有其他方法可以从python脚本中运行python脚本吗?在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
答案 0 :(得分:2)
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')])
那是说:您确定要将另一个脚本作为单独的 process 运行吗?很有可能,更好的解决方案是提取Python函数的可重用库,并将该库import
插入各种脚本中。
将Python模块的集合创建并打包到可重用的库中可能是一项艰巨的任务,因为它将使您从“一组不相关的脚本”转向“打包的编程产品”。如果您有需要开始共享实现细节的脚本,那么也许应该将共享代码当作库考虑。